4

When using PencilKit in iOS 13/iPadOS, how do you change the content in PKDrawing? For example, can I go through all the lines and change the color or width of the lines? Or for selected lines (via lasso)? Or add a straight line in our own code?

byaruhaf
  • 4,128
  • 2
  • 32
  • 50
Lim Thye Chean
  • 8,704
  • 9
  • 49
  • 88
  • tip: If you are using the PKToolSet you can use the select tool to select strokes. With them selected, chose a new color in the tool bar and it will change those strokes to that color – Adam Meyer Nov 13 '19 at 23:01
  • 1
    …but doing in programmatically? – Lim Thye Chean Nov 14 '19 at 03:02
  • I haven't found a way to do it programmatically - But there might be some hints here: https://github.com/w0lfschild/macOS_headers/blob/master/macOS/PrivateFrameworks/PencilKit/20/PKStrokeSelection.h – Adam Meyer Nov 16 '19 at 00:21

2 Answers2

3

PKDrawing is listed as an Opaque data object. See this Wikipedia Link for an explanation of opaque data object. Unfortunately strokes are not exposed to us. Our only 2 options currently can be found in the docs under Modifying the Drawing. Basically we can only apply a transform or append drawings in the current api. In Apple's Demo, they show how to implement undo using the append method. If you download the demo, see func setNewDrawingUndoable(_ newDrawing: PKDrawing) to see how you can implement undo.

hidden-username
  • 2,610
  • 3
  • 14
  • 19
2

You can set the built-in selectors undo: and redo: to the first responder of the View Controller.

WWDC 19 has a demo has an example that does that in the storyboard itself. Here's the link for you: https://developer.apple.com/documentation/pencilkit/drawing_with_pencilkit

AnupamChugh
  • 1,779
  • 1
  • 25
  • 36