用于导航的 SwiftUI PencilKit 协调器

问题描述

我不是从列表中选择,而是尝试通过使用按钮循环浏览,像书一样在绘图之间导航,但画布不会更新。

我正在 https://www.youtube.com/watch?v=amZH2i6l004&list=PLbrKvTeCrFAfoACvHOPWFmDIaKUqBZgEr&index=5

上学习 DevTechie 的精彩教程

github 存储库位于 https://github.com/devtechie/DrawingDocuments

这是我的 ContentView 和我的 DrawingWrapper 版本。 DrawingWrapper 使用 DrawingManager (SwiftUI) 从 CoreData 和 DrawingViewController 中提取来定义 PKCanvas。我不确定要使用哪个委托,并且真的很难理解如何刷新画布。

内容视图

struct ContentView: View {
  @StateObject var manager = DrawingManager()
  @State var addNewShown = false
  @State var pageNumber: Int = 0
  @State var newVar = UUID()
  
  var body: some View {
   vstack{
      Text(manager.docs[pageNumber].name!)
      HStack{
        Button(action:{
          pageNumber -= 1
          newVar = manager.docs[pageNumber].id!
          //desiredDoc = manager.docs[pageNumber]
        }){
          Image(systemName: "chevron.left")
        }
        Spacer()
        Button(action:{
          pageNumber += 1
          newVar = manager.docs[pageNumber].id!
          //desiredDoc = manager.docs[pageNumber]
        }){
          Image(systemName: "chevron.right")
        }
      }
   }
}

绘图包装器

struct DrawingWrapper: UIViewControllerRepresentable {
  var manager: DrawingManager
  @Binding var doc: DrawingDoc
  
  typealias UIViewControllerType = DrawingViewController
  
  class Coordinator: NSObject,PKCanvasViewDelegate {
    var parent: DrawingWrapper
    init(_ parent: DrawingWrapper){
      self.parent = parent
    }
    
    func canvasViewDidFinishRendering(_ canvasView: PKCanvasView) {
      if let uiDrawing = canvasView.drawing as? PKDrawing {
        parent.doc.data = uiDrawing.dataRepresentation()
      }
    }
  }
  
  func makeCoordinator() -> Coordinator {
    Coordinator(self)
  }
  
  func makeUIViewController(context: UIViewControllerRepresentableContext<DrawingWrapper>) -> DrawingWrapper.UIViewControllerType {
    let viewController = DrawingViewController()
    viewController.drawingData = doc.data!
    viewController.drawingChanged = {data in
      manager.update(data: data,for: doc.id!)
    }
    viewController.delegate = context.coordinator
    return viewController
  }
  
  func updateUIViewController(_ uiViewController: DrawingViewController,context: UIViewControllerRepresentableContext<DrawingWrapper>) {
    uiViewController.drawingData = doc.data!
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)