web-dev-qa-db-fra.com

PDFKit - PDFView using pageViewController - le rendu de la page est lent lors du passage à la page suivante

J'ai un PDFView qui est configuré pour utiliser un pageViewController:

    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: [:])

Chaque fois que je glisse pour aller à la page suivante, cette page est floue pendant une demi-seconde avant d'être rendue de manière abrupte. C'est assez énervant. Puis-je en quelque sorte précharger les pages? Je n'ai trouvé aucun attribut/méthode dans la documentation.

(Fait intéressant, j'ai exactement le même problème dans Preview sur MacOS quand il est en mode plein écran [depuis toujours, sur tous les mac que je possède])

Il ne dépend pas de la taille du fichier PDF. Le problème se produit avec chaque pdf que j'ai essayé.

Merci pour toute aide

8
Quantm

Assurez-vous d’ajouter les valeurs de .maxScaleFactor .minScaleFactor également selon vos besoins et voyez si cela fait une différence dans le temps de chargement. Par ex. 

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

Avez-vous essayé de changer l'option interpolationQuality?

La qualité d'interpolation pour les images dessinées dans le contexte PDFView.

Les valeurs possibles sont 

  • none
  • faible
  • haute

Peut-être que vous pourriez essayer quelque chose comme

pdfView.interpolationQuality = .low

ou 

pdfView.interpolationQuality = .none
0
Adrian

Je pense que cela est dû à la haute résolution de votre PDF et à la façon dont PDFView rend le PDF. Avez-vous plus d'informations sur votre PDF?

Pourriez-vous essayer avec un PDF avec des images moins lourdes? Cela devrait rendre bien. Si tel est le cas, ce n'est pas votre code qui est en cause, mais les ressources nécessaires pour l'afficher et le restituer à la vue.

METTRE À JOUR

Vous pouvez essayer d’utiliser PDFView sans PageViewController et vous voir s’il se comporte. Vous pourriez faire ceci:

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)

Est-ce qu'il se comporte différemment? J'ai remarqué que l'option usePageViewController charge le document plus rapidement pour les gros documents PDF. Quelque chose à prendre en compte lors de la mise en œuvre.

J'espère que ça aide

0
Jeremie