0

As I am quite new to SwiftUI Programming I want to ask what the best way is to paste an Image into a PKCanvasView.

I do not expect to get any code but maybe some directions what are possible ways to achieve my goal. Unfortunately the only tutorials I find are setting the image as a background image to draw on it. I however do not want to have a full screen image, but an image that can be placed and resized depending on the users need.

I am using PencilKit in Swift UI with a DrawingWrapper:

    struct DrawingWrapper: UIViewControllerRepresentable {
  typealias UIViewControllerType = DrawingViewController
  
  var manager: API
  
  func makeUIViewController(context: Context) -> DrawingViewController {
    let viewController = DrawingViewController()
    viewController.drawingData = manager.getData()
    
    
    viewController.drawingChanged = { data in
      manager.updateDrawingData(data: data)
      let canvas = viewController.canvas
      manager.updateImage(image: canvas.drawing.image(from: canvas.bounds, scale: 1.0))
    }
    
    
    return viewController
  }
  
  func updateUIViewController(_ uiViewController: DrawingViewController, context: Context) {
    uiViewController.drawingData = manager.getData()
  }
  
}

My DrawingViewController looks like this:

class DrawingViewController: UIViewController {

  
  lazy var canvas: PKCanvasView = {
    let v = PKCanvasView()
    v.drawingPolicy = .pencilOnly
    v.minimumZoomScale = 1
    v.maximumZoomScale = 2
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
  }()
  
  lazy var toolPicker: PKToolPicker = {
    let toolPicker = PKToolPicker()
    toolPicker.addObserver(self)
    return toolPicker
  }()
  
  var drawingData = Data()
  
  var drawingChanged: (Data) -> Void = { _ in }
jakob witsch
  • 157
  • 1
  • 1
  • 12

1 Answers1

0

If what you want to archive is, to paste a background image on the your canvas in order to be able to draw on it:

You can put an image in the background and draw on by inserting an UIImageView as a subview to a PKCanvasView:

let canvasView = PKCanvasView()
canvasView.isOpaque = true
let imageView = UIImageView(image: UIImage(systemName: "pencil"))
canvasView.insertSubview(imageView, at: 1)
Cihan
  • 26
  • 1
  • 2