Pencilkit, allows me to draw if toolkit is not visible, but if I manage to show the toolkit I cannot draw

46 Views Asked by At

Have tried many methods to try and be able to draw and see the toolkit at the same time, I am trying to set it up to draw on top of an img and save those changes. below is one of my attempts where I can draw but not see toolkit.

import UIKit
import PencilKit

class ImageEditViewController: UIViewController, PKCanvasViewDelegate, PKToolPickerObserver {
    
    var originalImage: UIImage!
    var canvasView: PKCanvasView!
    var toolPicker: PKToolPicker?
    
    init(image: UIImage) {
        super.init(nibName: nil, bundle: nil)
        self.originalImage = image
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setUpPencilKit()
    }
    
    deinit {
        toolPicker?.removeObserver(self)
    }
    
    func setUpPencilKit() {
        self.canvasView = PKCanvasView(frame: self.view.bounds)
        self.canvasView.delegate = self
        self.canvasView.backgroundColor = .clear
        self.canvasView.drawingPolicy = .anyInput
        
        if let image = self.originalImage {
            let imageView = UIImageView(image: image)
            imageView.contentMode = .scaleAspectFit
            view.addSubview(imageView)
            view.addSubview(self.canvasView)
            view.sendSubviewToBack(imageView)
        }
        
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            if let window = self.view.window, self.toolPicker == nil {
                self.toolPicker = PKToolPicker.shared(for: window)
                self.toolPicker?.addObserver(self)
                self.toolPicker?.setVisible(true, forFirstResponder: self.view)
            }
        }
    }
    
    func toolPickerVisibilityDidChange(_ toolPicker: PKToolPicker) {
        // Handle visibility change if needed
    }
    
    // Additional PKCanvasViewDelegate methods can be implemented here
    
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        setUpPencilKit()
    }
    
    // MARK: - PKCanvasViewDelegate
    
    func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
        // Handle drawing changes if needed
    }
    
}

fetch image and produce a canvas view with said image to draw on using pencil kit and also have the toolkit display.

0

There are 0 best solutions below