I'm implementing swift UI image view overlaid by canvas view in Pencil kit
Because Pencil kit is in UIKit
I create another class for creating gesture recognizer
Thankfully it work so I can zoom or pan on canvas view and the underling image view is responding
But unlikely using Gesture and GestureState in SwiftUI It cause memory issue when I just zoom image it take almost 1GB
Here is my code
class GestureDelegate: NSObject, ObservableObject, UIGestureRecognizerDelegate {
var zoomScale: CGFloat {
fixedZoomScale * gestureZoomScale
}
var fixedZoomScale: CGFloat = 1
@Published var gestureZoomScale: CGFloat = 1
private(set) lazy var pinchGestureRecognizer: UIPinchGestureRecognizer = {
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchImage(_:)))
pinchGesture.delegate = self
return pinchGesture
}()
Here is canvas view in UIViewRepresentable There is pan gesture recognizer also but there is no problem with pan gesture
struct BlurMaskView: UIViewRepresentable {
private let canvas: PKCanvasView
private let gestureDelegate: GestureDelegate
func makeUIView(context: Context) -> PKCanvasView {
canvas.drawingPolicy = .anyInput
canvas.tool = tool
canvas.backgroundColor = .clear
canvas.addGestureRecognizer(gestureDelegate.pinchGestureRecognizer)
canvas.addGestureRecognizer(gestureDelegate.panGestureRecognizer)
return canvas
}