下午好,
我试图拍摄PDF快照,但是在iOS 12上访问视图内容时遇到一些困难。
为了显示PDF的内容,我已经使用了两种不同的方法:
在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
答案 0 :(得分:1)
也许它可以与Apple的PDFKit一起使用。据我所知,PDFView是UIView的子类。
import PDFKit
@IBOutlet var pdfView: PDFView!
let pdfDocument = PDFDocument(url: url)
pdfView.document = pdfDocument
然后将您的扩展名作为PDFView扩展名