拍摄iOS12上的PDF查看器快照

时间:2019-01-08 12:36:57

标签: ios swift

下午好,

我试图拍摄PDF快照,但是在iOS 12上访问视图内容时遇到一些困难。

为了显示PDF的内容,我已经使用了两种不同的方法:

  • UIDocumentInteractorController
  • Webview

在iOS 11上,我尚未拍摄过UIDocumentInteractorController视图的快照,而我能找到的最佳答案是这个https://stackoverflow.com/a/13332623/2568889。简而言之,它表示文档查看器在外部进程中运行,并在主应用程序进程无法访问的自己的窗口中运行。

WebView是当时的解决方案,直到iOS 12出现。在运行iOS 12的真实设备上进行测试时,我遇到了同样的问题,即在拍摄快照时无法访问查看器的内容。在检查视图层次结构时,看起来我们有一个childviewcontroller(PDFHostViewController),它是一个呈现实际视图的对象。

请注意,此问题仅适用于PDF,在常规网页上可以正常使用!

用于拍摄快照的代码:

private extension UIView {

    func takeSnapshot() -> UIImage {
        let format = UIGraphicsImageRendererFormat()
        format.opaque = self.isOpaque
        let renderer = UIGraphicsImageRenderer(size: self.frame.size, format: format)
        return renderer.image { context in
            self.drawHierarchy(in: self.frame, afterScreenUpdates: true)
        }
    }

}

注意:我也尝试过使用Web视图的本机Webview.takeSnapshot(with:,completionHandler),但它仅适用于常规网页,而不适用于PDF

1 个答案:

答案 0 :(得分:1)

也许它可以与Apple的PDFKit一起使用。据我所知,PDFView是UIView的子类。

import PDFKit

@IBOutlet var pdfView: PDFView!

let pdfDocument = PDFDocument(url: url)
pdfView.document = pdfDocument

然后将您的扩展名作为PDFView扩展名