.sheet 中的 SwiftUI PKCanvasView 在切换关闭时隐藏/关闭工具

问题描述 投票:0回答:1

我有一个

DrawingView
,它显示在 SwiftUI 中的
.sheet
内:

...
.sheet { DrawingView() }
struct DrawingView: View {
    private var canvasView = PKCanvasView()
    @Environment(\.dismiss) var dismiss

    var body: some View {
        NavigationStack {
            GeometryReader { proxy in
                MyCanvas(canvasView: canvasView)
            }
...

该视图托管我的 PKCanvasView:

struct MyCanvas: UIViewRepresentable {
    var canvasView: PKCanvasView
    @Binding var oldImage: UIImage?
    let picker = PKToolPicker()

    func makeUIView(context: Context) -> PKCanvasView {
        self.canvasView.tool = PKInkingTool(.pen, color: .black, width: 15)
        self.canvasView.becomeFirstResponder()
        return canvasView
    }
    
    func updateUIView(_ uiView: PKCanvasView, context: Context) {
        print(#function, uiView.drawing.strokes.count)
        picker.addObserver(canvasView)
        picker.setVisible(true, forFirstResponder: uiView)
        DispatchQueue.main.async {
            uiView.becomeFirstResponder()
        }
    }
}

到目前为止一切顺利,但是当我开始关闭工作表时,PKView 会自动关闭工具。当我将床单向上滑动时,它们就消失了。我仍然可以使用最后选择的笔进行绘画,但仅此而已。我认为这是第一响应者问题? SwiftUI 告诉 PKCanvasView 删除响应程序,因此它会关闭这些工具,对吗? 类似于键盘被关闭:(参见这篇文章

ios swift swiftui first-responder pencilkit
1个回答
0
投票

也许你可以手动使用

canvasView.becomeFirstResponder()
canvasView.resignFirstResponder()
来处理它

© www.soinside.com 2019 - 2024. All rights reserved.