如何为PDFView设置PDFPageOverlayViewProvider



[UPDATED]我正在尝试为PDFView设置pageOverlayViewProvider,但它无法按预期工作。未调用PDFPageOverlayViewProvider方法,PDFViewDelegate方法工作正常。

struct ReaderView: UIViewRepresentable {

public typealias UIViewType = PDFView

let url: URL
let document: PDFDocument

init(_ url: URL) {
self.url = url
self.document = PDFDocument(url: self.url)!
}

func makeCoordinator() -> Coordinator {
Coordinator()
}

func makeUIView(context: Context) -> PDFView {
let pdfView = PDFView()

pdfView.document = document
pdfView.displayMode = .singlePageContinuous
pdfView.displayDirection = .vertical
pdfView.autoScales = true
pdfView.delegate = context.coordinator
pdfView.pageOverlayViewProvider = context.coordinator
pdfView.usePageViewController(true)
pdfView.backgroundColor = .clear

document.delegate = context.coordinator
return pdfView
}

func updateUIView(_ uiView: PDFView, context: Context) {
}
}
extension ReaderView {

class Coordinator: NSObject, PDFPageOverlayViewProvider, PDFViewDelegate, PDFDocumentDelegate {

func pdfView(_ view: PDFView, overlayViewFor page: PDFPage) -> UIView? {
return UIView(frame: .zero)
}

func pdfView(_ pdfView: PDFView, willDisplayOverlayView overlayView: UIView, for page: PDFPage) { 
}

func pdfView(_ pdfView: PDFView, willEndDisplayingOverlayView overlayView: UIView, for page: PDFPage) { 
}

func pdfViewWillClick(onLink sender: PDFView, with url: URL) {
}

func didMatchString(_ instance: PDFSelection) {
}
}

要使pageOverlayViewProviderPDFView协同工作,似乎必须在将PDF文档与PDFView关联之前设置此实例属性。

在使用UIViewRepresentable时,当使用makeUIView功能制作PDFView时,以下内容应该有效:

func makeUIView(context: Context) -> PDFView {
let pdfView = PDFView()

pdfView.displayMode = .singlePageContinuous
pdfView.displayDirection = .vertical
pdfView.autoScales = true
pdfView.delegate = context.coordinator
pdfView.pageOverlayViewProvider = context.coordinator
pdfView.usePageViewController(true)
pdfView.backgroundColor = .clear

pdfView.document = document
document.delegate = context.coordinator
return pdfView
}

最新更新