首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PDFPageOverlayViewProvider设置为PDFView?

如何将PDFPageOverlayViewProvider设置为PDFView?
EN

Stack Overflow用户
提问于 2022-11-01 20:51:58
回答 1查看 94关注 0票数 1

更新后,我试图为一个pageOverlayViewProvider设置一个PDFView,但它不像预期的那样工作。没有调用PDFPageOverlayViewProvider方法,PDFViewDelegate方法运行良好。

代码语言:javascript
复制
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) {

    }
}
代码语言:javascript
复制
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) {
        }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 19:01:18

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

在使用UIViewRepresentable时,当使用makeUIView函数生成PDFView时,以下内容应该可以工作:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74281656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档