Post

Replies

Boosts

Views

Activity

Why does PKToolPicker disappear when blur and doesn't come back
When using PKCanvasView and PKToolPicker in a SwiftUI project using Xcode 13, the PKToolPicker disappear when I blur the view, and it doesn't come back when I remove the blur effect. I am trying to create a popup (to add some setting to the view), but here I simplify the example to just just to see the consequences of the blur effet. When the blur effect is applied, the PKToolPicker disappear, but when I remove the effect, the PKToolPicker despot come back, so it is still possible to right non the PKCanvasView, but it is not possible to change the Pencil or the color anymore. Does anyone know how to get the PKToolPicker back? here is a sample code import SwiftUI struct ContentView: View { @Environment(\.managedObjectContext) private var viewContext @State private var isBlured = false var body: some View { VStack { Button(action: { isBlured.toggle() print("isBlured \(isBlured)") }, label: { Image(systemName: "questionmark") }) DrawingView(id: nil, data: nil, title: "test").blur(radius: isBlured ? 30 : 0) }.padding() } } import SwiftUI struct DrawingView: View { @Environment(\.managedObjectContext) var viewContext @State var id:UUID? @State var data:Data? @State var title:String? var body: some View { VStack{ DrawingCanvasView(data: data ?? Data(), id: id ?? UUID()) .environment(\.managedObjectContext, viewContext) .navigationBarTitle(title ?? "Untitled",displayMode: .inline) } } } import SwiftUI struct DrawingCanvasView: UIViewControllerRepresentable { @Environment(\.managedObjectContext) private var viewContext func updateUIViewController(_ uiViewController: DrawingCanvasViewController,context: Context) { uiViewController.drawingData = data } typealias UIViewControllerType = DrawingCanvasViewController var data: Data var id: UUID func makeUIViewController(context: Context) -> DrawingCanvasViewController { let viewController = DrawingCanvasViewController() viewController.drawingData = data return viewController } } import UIKit import PencilKit class DrawingCanvasViewController: UIViewController, PKToolPickerObserver, PKCanvasViewDelegate { lazy var canvas: PKCanvasView = { let view = PKCanvasView() view.drawingPolicy = .anyInput view.minimumZoomScale = 1 view.maximumZoomScale = 1 view.translatesAutoresizingMaskIntoConstraints = false return view }() lazy var toolPicker: PKToolPicker = { let toolPicker = PKToolPicker() toolPicker.addObserver(self) return toolPicker }() var drawingData = Data() var drawingChanged: (Data) -> Void = {_ in} override func viewDidLoad() { super.viewDidLoad() view.addSubview(canvas) NSLayoutConstraint.activate([ canvas.leadingAnchor.constraint(equalTo: view.leadingAnchor), canvas.trailingAnchor.constraint(equalTo: view.trailingAnchor), canvas.topAnchor.constraint(equalTo: view.topAnchor), canvas.bottomAnchor.constraint(equalTo: view.bottomAnchor)]) toolPicker.setVisible(true, forFirstResponder: canvas) toolPicker.addObserver(canvas) canvas.delegate = self canvas.becomeFirstResponder() if let drawing = try? PKDrawing(data: drawingData){ canvas.drawing = drawing } } }
1
0
766
Mar ’22