ios - SwiftUI 中的 PencilKit
问题描述
我正在尝试PencilKit
在 SwiftUI 中使用。
- 如何在
updateUIView
-function 中检测到哪个Binding
-variable 已更新?例如,我不想在更改颜色时清除画布。 - 还有比切换布尔值更好的方法来清除画布吗?切换布尔值会强制
updateUIView
执行 -function。
import SwiftUI
import UIKit
import PencilKit
struct ContentView: View {
@State var color = UIColor.black
@State var clear = false
var body: some View {
VStack{
PKCanvas(color: $color, clear:$clear)
VStack(){
Button("Change to BLUE"){ self.color = UIColor.blue }
Button("Change to GREEN"){ self.color = UIColor.green }
Button("Clear Canvas"){ self.clear.toggle() }
}
}
}
}
struct PKCanvas: UIViewRepresentable {
class Coordinator: NSObject, PKCanvasViewDelegate {
var pkCanvas: PKCanvas
init(_ pkCanvas: PKCanvas) {
self.pkCanvas = pkCanvas
}
}
@Binding var color:UIColor
@Binding var clear:Bool
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: Context) -> PKCanvasView {
let canvas = PKCanvasView()
canvas.tool = PKInkingTool(.pen, color: color, width: 10)
canvas.delegate = context.coordinator
return canvas
}
func updateUIView(_ canvasView: PKCanvasView, context: Context) {
// clears the canvas
canvasView.drawing = PKDrawing()
// sets a new color
canvasView.tool = PKInkingTool(.pen, color: color, width: 10)
}
}
解决方案
这可以解决问题:
func updateUIView(_ canvasView: PKCanvasView, context: Context) {
if clear != context.coordinator.pkCanvas.clear{
canvasView.drawing = PKDrawing()
}
canvasView.tool = PKInkingTool(.pen, color: color, width: 10)
}
推荐阅读
- php - 每个帖子类型的 Wordpress 作者页面分页
- c# - Asp.Net Core 2.2 - 了解身份验证中间件和外部登录
- c# - c# 如何访问添加到集合中的实例?
- javascript - Anylogic问题:两个不同的代理有两个不同的服务时间
- javascript - 根据变量在选项卡中显示不同的数据
- javascript - 如何切换不等于特定文本/类别的所有列表项?
- mysql - 休眠拦截器中的spring boot autowired存储库不起作用
- qt - 如何在 Qt Layout 中设置单个小部件的大小?
- python - 我想分别提取图像中的所有字符..最好的方法是什么?
- javascript - 如何在 react.js 的 setState 中创建 THREE.PerspectiveCamera 对象