我正在尝试将铅笔套件集成到 SwiftUI 中的 PDFKit 视图上,但协调器委托方法永远不会触发。我在这里做错了什么?
`导入 SwiftUI 导入PDFKit 导入铅笔套件
结构 PDFDocumentView: 查看 { var url: 网址?
var body: some View {
if let pdfURL = url {
let pdfDocument = PDFDocument(url: pdfURL)
if let pdf = pdfDocument {
PDFViewWrapper(pdfDocument: pdf)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
}
}
}
}
结构 PDFViewWrapper:UIViewControllerRepresentable {
var pdfDocument: PDFDocument
var coordinator: OverlayCoordinator = OverlayCoordinator()
func makeUIViewController(context: UIViewControllerRepresentableContext<PDFViewWrapper>) -> some UIViewController {
let pdfView = PDFView()
pdfView.document = pdfDocument
pdfView.pageOverlayViewProvider = coordinator
pdfView.delegate = coordinator
pdfView.isInMarkupMode = true
let viewController = UIViewController()
viewController.view.addSubview(pdfView)
pdfView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([pdfView.leadingAnchor.constraint(equalTo: viewController.view.leadingAnchor),
pdfView.trailingAnchor.constraint(equalTo: viewController.view.trailingAnchor),
pdfView.bottomAnchor.constraint(equalTo: viewController.view.bottomAnchor),
pdfView.topAnchor.constraint(equalTo: viewController.view.topAnchor)])
return viewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: UIViewControllerRepresentableContext<PDFViewWrapper>) {}
}`
`类 OverlayCoordinator : NSObject、PDFPageOverlayViewProvider 、PDFViewDelegate {
var pageToViewMapping = [PDFPage: PKCanvasView]() // Change UIView to PKCanvasView
func pdfView(_ pdfView: PDFView, willDisplayOverlayView overlayView: UIView, for page: PDFPage) {
print("here")
}
func pdfView(_ view: PDFView, overlayViewFor page: PDFPage) -> UIView? {
print("Setup Overlay View ")
if let canvasView = pageToViewMapping[page] {
return canvasView
} else {
let canvasView = PKCanvasView(frame: .zero)
canvasView.backgroundColor = UIColor.clear
canvasView.drawingPolicy = .anyInput
canvasView.tool = PKInkingTool(ink: .init(.pen), width: 90)
canvasView.isOpaque = false
pageToViewMapping[page] = canvasView
return canvasView
}
}
}
#预览{ PDF文档视图() }`
好吧,我自己找到了解决办法。好像是这个设定
`pdfView.pageOverlayViewProvider = coordinator` should be done before
pdfView.document = pdfDocument
很奇怪但是还好