現在、SwiftUIとPencilKitを用いてアプリを制作しております。
#やりたいこと
PKToolPickerを使わずに、PKCanvasView.toolを変更し(ここまでできた)、
PKCanvasView.toolの状態をみて、どのツールを使っているかを表示したい(できていない)
###環境
・MacOS: 10.15.5
・Xcode: 11.6
・iOS: 13.6
・Swift5.2
###ソースコード
問題が再現できるソースコードを用意しました。
この状態で実行すると、
画面左側にApplePencil or 指で描画できるキャンバス
画面右側にPKCanvasView.toolのツールを切り替えるボタンと、その下に現在のツールを表示するText()が現れます。
ボタンを押すと、PKCanvasView.toolのツールが切り替わったのが確認できました。
しかし、現在のツールを表示するText()が更新されません。
Swift
1import SwiftUI 2import PencilKit 3 4struct ContentView: View { 5 @State private var canvasView: PKCanvasView = .init() 6 var body: some View { 7 ZStack { 8 CanvasViewRepresentable(canvasView: self.$canvasView) 9 HStack { 10 Spacer() 11 VStack { 12 Button(action: { 13 if self.canvasView.tool as? PKInkingTool != nil { 14 self.canvasView.tool = PKEraserTool(.vector) 15 } else { 16 self.canvasView.tool = PKInkingTool(.marker) 17 } 18 }) { 19 Text("Toggle Tool") 20 } 21 if self.canvasView.tool as? PKInkingTool != nil { 22 Text("InkingTool") 23 } else if self.canvasView.tool as? PKEraserTool != nil { 24 Text("EraserTool") 25 } 26 } 27 } 28 } 29 } 30} 31 32struct CanvasViewRepresentable: UIViewRepresentable { 33 @Binding var canvasView: PKCanvasView 34 35 func makeUIView(context: Context) -> PKCanvasView { 36 self.canvasView.tool = PKInkingTool(.pen, color: .black, width: 15) 37 self.canvasView.isOpaque = false 38 39 // 標準のPKToolPickerは使わず、自力でToolを変更したいです。 40 /*if let window = UIApplication.shared.windows.first { 41 if let toolPicker = PKToolPicker.shared(for: window) { 42 toolPicker.addObserver(canvasView) 43 toolPicker.setVisible(true, forFirstResponder: canvasView) 44 canvasView.becomeFirstResponder() 45 } 46 }*/ 47 return canvasView 48 } 49 50 func updateUIView(_ uiView: PKCanvasView, context: Context) { 51 } 52 53}
どうすれば、Text()が現在のツールに応じて更新されるでしょうか?
ご教授よろしくお願いいたします。
あなたの回答
tips
プレビュー