0

I am trying to make a drawing app for IOS 15.5 using pencilKit. I can draw on screen but when i want to change tool using toolPicker it is not actually changing(it keeps drawing with default one) here is my code

import UIKit
import PencilKit
class ViewController: UIViewController, PKCanvasViewDelegate, PKToolPickerObserver{
    @IBOutlet weak var canvasView: PKCanvasView!
    override func viewDidLoad() {
        super.viewDidLoad()
        canvasView.delegate = self
        canvasView.becomeFirstResponder()
    }
    override func viewDidAppear(_ animated:  Bool) {
        super.viewDidAppear(true)
        canvasView.drawingPolicy = .anyInput
        setUpCanvasView()
    }
    func setUpCanvasView(){
        let toolPicker = PKToolPicker.init()
        toolPicker.addObserver(canvasView)
        toolPicker.setVisible(true, forFirstResponder: canvasView)
        canvasView.becomeFirstResponder()
    }
        func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
            print("drawing")
        }
        
        func canvasViewDidEndUsingTool(_ canvasView: PKCanvasView) {
            print("End using the PK tools")
        }
        
        func canvasViewDidFinishRendering(_ canvasView: PKCanvasView) {
            print("Completed the UI Event")
        }
        
    }
Mixturka
  • 3
  • 1

1 Answers1

0

The problem here is, that you are creating a PKToolPicker instance in a function and after the functions ends, the instance gets deallocated from the memory. Do it likes this and it should work.

import UIKit
import PencilKit

class ViewController: UIViewController, PKCanvasViewDelegate, PKToolPickerObserver {

@IBOutlet weak var canvasView: PKCanvasView!
let toolPicker = PKToolPicker()

   override func viewDidLoad() {
     super.viewDidLoad()
     canvasView.delegate = self
     canvasView.becomeFirstResponder()
    }

    override func viewDidAppear(_ animated:  Bool) {
      super.viewDidAppear(true)
      canvasView.drawingPolicy = .anyInput
      setUpCanvasView()
    }

    func setUpCanvasView(){
       toolPicker.addObserver(canvasView)
       toolPicker.setVisible(true, forFirstResponder: canvasView)
       canvasView.becomeFirstResponder()
    }

    func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
        print("drawing")
    }
    
    func canvasViewDidEndUsingTool(_ canvasView: PKCanvasView) {
        print("End using the PK tools")
    }
    
    func canvasViewDidFinishRendering(_ canvasView: PKCanvasView) {
        print("Completed the UI Event")
    }
    
}
Cihan
  • 26
  • 1
  • 2