0

我正在使用 swift PencilKit 开发一个简单的绘图 iOS 应用程序。

我计划

  • 如果你用苹果铅笔或其他触控笔触摸

    • 画线(将 PKInkingTool 设置为画布的工具)
  • 否则(用手指)

    • 擦除线条(将 PKEraserTool 设置为画布的工具)

所以,你可以用铅笔画线,然后用手指擦掉

但也有困难。即使它在绘图时更改工具,更改的画布工具也不会立即反映出来。当您将手(或铅笔)从屏幕上移开时会反映出来。

绘图时如何正确反映更改后的工具?

我的代码是这个

import PencilKit

class MyPKCanvasView: PKCanvasView {
    
    private enum toolType:String {
        case pen
        case erazer
    }
    
    private let pen = PKInkingTool(.pen, color: .black, width: 30)
    private let erazer = PKEraserTool(.bitmap)
    
    private var currentTool: toolType = .pen {
        
        willSet {
            switch newValue {
            case .pen:
                self.tool = self.pen
            case .erazer:
                print("changed:eraser")
                self.tool = self.erazer
            }
        }
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
            switch touch.type {
            case .pencil:
                fallthrough
            case .stylus:
                print("pen")
                self.changeTool(.pen)
            default:
                print("finger")
                self.changeTool(.erazer)
            }
        }
    }
    
    private func changeTool(_ tool: toolType) {
        if self.currentTool == tool {
            return
        }
        self.currentTool = tool
    }
}
4

0 回答 0