这个错误很简单,我的画布视图没有响应任何我的选择器。当我想用橡皮擦时,它却一直在用钢笔。
当我调试它时,选择器确实改变了它的值,但它不影响画布
调试例子
TOOL PICKER PKInkingTool(tool: <PKInkingTool: 0x282978f80 com.apple.ink.pen color=UIExtendedSRGBColorSpace 0 0 0 1 width=2.679941>)
我正在使用SwiftUI,也许它与SwiftUI本身有任何关系?
这是我的画布代码
struct CanvasView: UIViewRepresentable {
@Binding var canvas:PKCanvasView
let picker: PKToolPicker = .init()
func makeUIView(context: Context) -> PKCanvasView {
canvas.drawingPolicy = .anyInput
canvas.backgroundColor = .clear
canvas.tool = PKInkingTool(.pencil, color: .darkText, width: 15)
canvas.becomeFirstResponder()
return canvas
}
func updateUIView(_ uiView: PKCanvasView, context: Context) {
picker.addObserver(canvas)
picker.setVisible(true, forFirstResponder: uiView)
DispatchQueue.main.async {
uiView.becomeFirstResponder()
}
}
}
我的期望是我的画布与它的选择器相对应,因为它应该是
问题就在这里:
struct CanvasView: UIViewRepresentable {
@Binding var canvas:PKCanvasView
let picker: PKToolPicker = .init()
通过这样做,每次创建CanvasView
时,您都在创建一个新的PKToolPicker
的实例,这可能是很多次(每次重新创建View
层次结构的这个节点)。
PKToolPicker
的引用,例如在Coordinator
中或传递给struct
的其他地方