我正在使用PencilKit构建一个绘图应用程序,我有一个预装的PKDrawing,其中装载了PKCanvasView。我的目标是允许用户使用预加载的PKDrawing作为参考来玩画布。我的问题是:是否有可能使预加载的PKDraw不可擦除?请注意,我不想完全阻止橡皮擦工具,用户必须能够擦除自己的绘图,但不是参考之一。

发布于 2022-12-04 07:55:47
这是解决这一问题的另一种方式。这是我的工作。
让我试着举例说明一下。在这里,我只删除高亮笔和重新绘制在同一画布上的其他路径。所以看起来就像只移除荧光笔,而不是其他文本。
我在这里已经提到了你需要遵循的四个步骤
步骤1>在类中声明临时变量
var tempPKDrawing: PKDrawing?步骤2>现在添加此PKCanvasViewDelegate方法
// MARK: Canvas View Delegate
extension PKCanvas: PKCanvasViewDelegate {
/// Delegate method: Note that the drawing has changed.
public func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
print("canvasViewDrawingDidChange\(canvasView.drawing)")
print ("toolPicker isVisible:\(toolPicker?.isVisible)")
//****** STEP 4> ******
//Remove Highlighter text
if canvasView.tool is PKEraserTool, let tempDrawing = self.tempPKDrawing {
if canvasView.drawing.strokes.count != tempDrawing.strokes.count {
var newDrawing : [PKStroke] = tempDrawing.strokes.filter({$0.ink.inkType != .marker})
newDrawing += canvasView.drawing.strokes.filter({$0.ink.inkType == .marker})
self.tempPKDrawing = nil
self.canvasView?.drawing = PKDrawing(strokes: newDrawing)
}
}
}
public func canvasViewDidBeginUsingTool(_ canvasView: PKCanvasView) {
print("canvasViewDidBeginUsingTool:\(canvasView.drawing)")
//****** STEP 3> ******
if canvasView.tool is PKEraserTool {
self.tempPKDrawing = canvasView.drawing
}
//canvasView.drawingPolicy = PKEraserToolReference(eraserType: .)
}
public func canvasViewDidEndUsingTool(_ canvasView: PKCanvasView) {
print("canvasViewDidEndUsingTool")
}
public func canvasViewDidFinishRendering(_ canvasView: PKCanvasView) {
print("canvasViewDidFinishRendering")
}
}

谢谢库尔;)
https://stackoverflow.com/questions/70385470
复制相似问题