PKCanvasView不改变工具



这个错误很简单,我的画布视图没有响应任何我的选择器。当我想用橡皮擦时,它却一直在用钢笔。

当我调试它时,选择器确实改变了它的值,但它不影响画布

调试例子

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的其他地方

相关内容

  • 没有找到相关文章

最新更新