如何在 UIDocumentInteractionController 中显示铅笔选项?

How to show pencil option in UIDocumentInteractionController?

我正在尝试使用 UIViewControllerRepresentable 在 swiftUI 中使用 UIDocumentInteractionController。我的代码运行良好,但我想向我的应用程序添加铅笔功能。我希望能够使用铅笔或手指绘制图像。当您在文件应用程序中打开图像时,您会在右上角看到那个铅笔按钮。我正在使用 UIDocumentInteractionController,它只在顶部提供完成按钮和共享按钮。我想知道文件应用程序是否使用相同的东西来打开图像。如果是,如何启用该铅笔按钮?如果不是,那么应用程序打开图像所用的文件是什么?

谢谢!

UIViewControllerRepresentable

struct UIDocumentInteractionControllerWrapper: UIViewControllerRepresentable {
    private var isActive: Binding<Bool>
    private let docController: UIDocumentInteractionController
    
    private let viewController = UIViewController()
    
    internal init(isActive: Binding<Bool>, url: URL) {
        self.isActive = isActive
        self.docController = UIDocumentInteractionController(url: url)
    }
    
    func makeUIViewController(context: Context) -> UIViewController {
        return viewController
    }
    
    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
        
        if self.isActive.wrappedValue && docController.delegate == nil {
            docController.delegate = context.coordinator
            self.docController.presentPreview(animated: true)
        }
    }
    
    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }
    
    final class Coordinator: NSObject,UIDocumentInteractionControllerDelegate {
        let parent: UIDocumentInteractionControllerWrapper
        
        init(_ parent: UIDocumentInteractionControllerWrapper) {
            self.parent = parent
        }
        
        func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
            return parent.viewController
        }
        
        func documentInteractionControllerDidEndPreview(_ controller: UIDocumentInteractionController) {
            controller.delegate = nil
            parent.isActive.wrappedValue = false
        }
    }
}

我的应用程序

Apple 的文件应用程序

第二个截图是QLPreviewController

请参阅 test module here 了解如何集成它。

另外 this my post 关于与 UINavigationController 的集成可能会有帮助