SwiftUI中的PencilKit [英] PencilKit in SwiftUI
本文介绍了SwiftUI中的PencilKit的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在SwiftUI中使用PencilKit
.
I'm trying to use PencilKit
in SwiftUI.
- 如何在
updateUIView
函数中检测到哪个Binding
变量已更新?例如,更改颜色时我不想清除画布. - 还有比清除布尔值更好的清除画布的方法吗?切换布尔值会强制执行
updateUIView
函数.
- How can I detect in the
updateUIView
-function, whichBinding
-variable was updated? For example I don't want to clear the canvas when changing the color. - And is there a better way to clear the canvas than toggling a boolean? Toggling a boolean forces the
updateUIView
-function to execute.
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)
}
这篇关于SwiftUI中的PencilKit的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文