【问题标题】:Prevent user from erasing drawings with PencilKit - Swift防止用户使用 PencilKit - Swift 擦除绘图
【发布时间】:2022-12-04 16:08:21
【问题描述】:

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

【问题讨论】:

  • 我能想到的两个选项:1) 不要使用 PKDrawing 作为参考——使用图像 2) 在单独的画布上使用 PKDrawing用于用户绘图的画布。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: ios swift xcode mobile pencilkit


【解决方案1】:

这是解决此问题的替代方法。这对我有用。

让我试着用例子来解释。在这里,我只删除了荧光笔并在同一画布上重绘了其他路径。所以它看起来像是只删除荧光笔而不是其他文本。

我在这里提到了您需要遵循的 4 个步骤

步骤 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")
  }
}

谢谢库尔 ;)

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多