【问题标题】:PDFKit - PDFView using pageViewController - page rendering slow when swiping to next pagePDFKit - 使用 pageViewController 的 PDFView - 滑动到下一页时页面呈现缓慢
【发布时间】:2018-08-26 09:44:27
【问题描述】:

我有一个设置为使用 pageViewController 的 PDFView:

    let pdfView = PDFView()
    let pdfDoc = PDFDocument(url: Bundle.main.url(forResource: "test", withExtension: "pdf")!)
    pdfView.document = pdfDoc
    pdfView.autoScales = true
    pdfView.displayDirection = .horizontal
    pdfView.usePageViewController(true, withViewOptions: [:])

每当我滑动到下一页时,都会说下一页模糊了半秒钟,然后才清晰呈现。这很烦人。我可以以某种方式预加载页面吗?我在文档中没有找到任何属性/方法。

(有趣的是,我在MacOS 上的Preview 在全屏模式下遇到了完全相同的问题[从永远开始,在我拥有的每台Mac 上])

它不依赖于 pdf(文件)大小。我尝试的每个 pdf 都会出现问题。

感谢您的帮助

【问题讨论】:

  • 你可以试试这个代码吗:如果让 documentURL = Bundle.main.url(forResource: "download", withExtension: "pdf"), let document = PDFDocument(url: documentURL), let page = document.page(at: 0) { pdfView?.document = document pdfView?.autoScales = true pdfView?.backgroundColor = UIColor.lightGray pdfView?.displayDirection = .horizo​​ntal pdfView?.displayMode = .singlePageContinuous pdfView?.usePageViewController(是的,withViewOptions: [:]) }
  • 还是同样的问题。这也只是添加了pdfView?.displayMode = .singlePageContinuous ,为什么不使用let page = document.page(at: 0)?
  • 这段代码非常适合我。我还有一些关于 page 的其他代码,我只是给了你 pdf 加载部分代码。您是否在设备上测试过您的代码?
  • 啊好的。是的,我在 Ipad Pro 2、iPhone 7 和模拟器上进行了测试。在每台设备上都是一样的。很奇怪
  • 我尝试使用示例 pdf 捕捉它呈现的那一刻:imgur.com/a/wtBxR

标签: ios swift performance pdfkit


【解决方案1】:

您是否尝试更改 interpolationQuality 选项?

绘制到 PDFView 上下文中的图像的插值质量。

可能的值是

  • 无
  • 低
  • 高

也许你可以尝试类似的东西

pdfView.interpolationQuality = .low

或

pdfView.interpolationQuality = .none

【讨论】:

    【解决方案2】:

    请确保也根据您的要求添加 .maxScaleFactor .minScaleFactor 的值,看看它是否对加载时间有任何影响。 例如

    .maxScaleFactor = 4.0;
    .minScaleFactor = self.scaleFactorForSizeToFit;
    

    【讨论】:

    • 刚试过。不用找了。还是很慢。无论如何,我认为它不应该有任何重大影响。我从头开始编写自己的 pdf 查看器,并且能够完整地渲染每个 pdf 文件而没有任何问题。不过,我很好奇为什么 Apple 自己的 PDFKit 有问题。
    • Quantm- 我正在寻找一个 pdf 查看器。您能否提供有关您在某些示例代码上所做的其他详细信息?
    【解决方案3】:

    我认为这是由于 PDF 的高分辨率和 PDFView 呈现 PDF 的方式。你有更多关于你的 PDF 的信息吗?

    您可以尝试使用图片较少的 PDF 吗?它应该渲染得很好。如果是这样,则不是您的代码有问题,而是显示并将其呈现到视图所需的资源。

    更新

    您可以尝试使用不带 PageViewController 的 PDFView 并查看它的行为。你可以这样做:

    pdfView = PDFView(frame: view.frame)
    pdfView.backgroundColor = UIColor.white
    
    var documentName: String = "test"
    
    if let documentURL = Bundle.main.url(forResource: documentName, withExtension: "pdf") {
        if let document = PDFDocument(url: documentURL) {
            pdfView.autoScales = true
            pdfView.displayDirection = .horizontal
            pdfView.displayMode = .singlePageContinuous
            pdfView.document = document
        }
    }
    
    self.view.addSubview(pdfView)
    

    它的行为是否不同?我注意到usePageViewController 选项可以更快地加载大型 PDF 文档的文档。实施时需要考虑的事项。

    希望对你有帮助

    【讨论】:

    • 不,这不是分辨率。正如我所说,我尝试了多种不同的 PDF。我尝试了巨大的高分辨率图像 PDF 和纯文本的小型 PDF。结果是一样的(cmets 中的屏幕截图来自高分辨率,只是因为在那里更容易看到)。上面的代码就是我写的所有代码(除了设置 AutoLayout 约束并将其添加为子视图)。
    • 关于您的更新。是的,我试过了。使用.singlePageContinuous,它渲染得非常快,没有任何问题(即使在模拟器中也差不多)。但不幸的是,我不希望它是连续的。这非常奇怪:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2019-10-04
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多