Reputation: 41
I’m working on a SwiftUI + PencilKit integration, and I’ve encountered a strange issue. When I place my PKCanvasView inside a ZStack without an image, everything works fine—the drawing updates in real-time as expected. However, when I add an image behind the canvas, real-time updates stop working. Instead:
My Code
import SwiftUI
import PencilKit
struct DrawingView2: UIViewRepresentable {
@Binding var canvasView: PKCanvasView
let toolPicker = PKToolPicker()
func makeUIView(context: Context) -> PKCanvasView {
canvasView.backgroundColor = .clear
canvasView.isOpaque = false
canvasView.isMultipleTouchEnabled = true
canvasView.allowsFingerDrawing = true
canvasView.drawingPolicy = .anyInput // Enables real-time updates
toolPicker.setVisible(true, forFirstResponder: canvasView)
toolPicker.addObserver(canvasView)
canvasView.becomeFirstResponder()
return canvasView
}
func updateUIView(_ uiView: PKCanvasView, context: Context) {
DispatchQueue.main.async {
uiView.setNeedsDisplay() // Forces view to refresh
}
}
}
ContentView with an Image Behind the Canvas
struct ContentView2: View {
@State private var canvasView = PKCanvasView()
var body: some View {
ZStack {
Image("img2") // Background image
DrawingView2(canvasView: $canvasView)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.zIndex(11111) // High zIndex to ensure visibility
}
.edgesIgnoringSafeArea(.all)
}
}
What I Tried Setting isOpaque = false → No effect. Calling setNeedsDisplay() in updateUIView → No effect. Using .zIndex(1) for the image → No effect. Setting allowsFingerDrawing = true → No effect.
Upvotes: 0
Views: 12