PKCanvasView — Как мгновенно отразить измененный инструмент во время рисования?

#swift #apple-pencil

Вопрос:

Я разрабатываю простое приложение для рисования iOS с помощью swift, PencilKit.

Я планирую это

  • при прикосновении с помощью apple pencil или другого стилуса
    • нарисуйте линии ( установите PKInkingTool в инструмент canvas )
  • еще (пальцем)
    • стирание линий ( установите PKEraserTool в инструмент canvas )

Таким образом, вы можете рисовать линии карандашом и стирать их пальцем

Но есть и трудности. Даже если он изменяет инструмент во время рисования, измененные инструменты холста не отражаются мгновенно, они отражаются, когда вы убираете руку (или карандаш) с экрана.

Как правильно отразить измененный инструмент при рисовании?

мой код таков

 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
    }
}
 

Комментарии:

1. Ты когда-нибудь понимал это? Насколько я могу судить, набор карандашей все еще очень и очень ограничен. Я уже некоторое время пытаюсь собрать что-то воедино, и мне кажется, что мне было бы лучше написать свой собственный движок рисования, потратив столько времени впустую.