2

I'm trying to put together a simple drawing app using PencilKit. However, when I zoom in on the canvas, I'd like the stroke to be thinner (visually the same size on the screen as it was before zooming in, but once I zoom all the way out, the result would be thinner). Moreover, I'd like the strokes to be always uniform, which means not change its size based on speed/timing of stroke, angle, etc. A simple scribbling pad. I have a fully working drawing canvas already, but I can't make those extra requirements work. Here's what I tried:

Conformed to PKCanvasViewDelegate and implemented canvasViewDidEndUsingTool. There, I added my code to customize the strokes, for instance this snippet that transforms everything to have a uniform 5x5 stroke:

func canvasViewDidEndUsingTool(_ canvasView: PKCanvasView) {
    dump(canvasView.drawing.strokes.count)
    var newDrawingStrokes = [PKStroke]()
    for stroke in canvasView.drawing.strokes {
        var newPoints = [PKStrokePoint]()
        stroke.path.forEach { (point) in
            let newPoint = PKStrokePoint(
                location: point.location,
                timeOffset: point.timeOffset,
                size: CGSize(width: 5,height: 5),
                opacity: CGFloat(1),
                force: point.force,
                azimuth: point.azimuth,
                altitude: point.altitude
            )
            newPoints.append(newPoint)
        }
        let newPath = PKStrokePath(controlPoints: newPoints, creationDate: Date())
        newDrawingStrokes.append(PKStroke(ink: PKInk(.pen, color: .white), path: newPath))
    }
    let newDrawing = PKDrawing(strokes: newDrawingStrokes)
    canvasView.drawing = newDrawing
}

This delegate gets called when I finish drawing a stroke on the canvas. However, upon invoking the canvasView.drawing = newDrawing on the last line, I get this log on the console:

[] Drawing count mismatch!

And the stroke I just drew disappears.

I don't know what's wrong with this since my snippet simply iterates over the existing strokes, modify them, and set them again on the drawing. I found no documentation around this and Google earned 0 results for this error/warning message.

Appreciate any help.

Roger Oba
  • 1,292
  • 14
  • 28

0 Answers0