Il y a eu beaucoup de Questions récemment à propos du dessin PDF.
Oui, vous pouvez afficher des fichiers PDF très facilement avec un UIWebView
mais ce cant donner les performances et les fonctionnalités que vous attendez d'un bon lecteur de PDF.
Vous pouvez dessiner une page PDF pour une CALayer ou à une UIImage. Apple même avoir un exemple de code pour montrer comment dessiner un grand PDF dans un Zoomable UIScrollview
Mais les mêmes questions à garder à fuser.
UIImage Méthode:
- PDF dans un
UIImage
ne sont pas optiquement l'échelle ainsi que d'une Couche d'approche. - Le CPU et la mémoire frappé sur la génération de
l'
UIImages
d'unPDFcontext
limites/empêche de l'utiliser pour créer un en temps réel le rendu de nouveaux niveaux de zoom.
CATiledLayer Méthode:
- Il ya une Surcharge importante (temps)
dessin pleine page PDF pour une
CALayer
: carreaux individuels peut être vu de rendu (même avec un taillecarreau tweak) -
CALayers
ne peut pas être préparé à l'avance de temps (rendu hors de l'écran).
Généralement des lecteurs de PDF sont très lourdes sur la mémoire trop. Même surveiller l'utilisation de la mémoire de la pomme de zoomable PDF exemple.
Dans mon projet actuel, je suis le développement d'une visionneuse PDF et je suis rendu un UIImage
d'une page dans un thread séparé (questions ici aussi!) et de le présenter même si l'échelle est x1. CATiledLayer
le rendu des coups de pied dans une fois que la balance est >1. iBooks prend un semblable double approche que si vous faites défiler les pages, vous pouvez voir une baisse des res version de la page pour seulement moins d'une seconde avant qu'un croustillant de version s'affiche.
Im rendu 2 pages de chaque côté de la page, dans l'accent, de sorte que l'image PDF est prêt à masquer le calque avant de commencer le dessin.Les Pages sont détruits lorsqu'ils sont +2 pages à l'écart de la page.
Quelqu'un aurait-il des idées, n'importe comment petit ou évident pour améliorer la performance/ gestion de la mémoire de Dessin PDF? ou toutes autres questions abordées ici?
EDIT: Quelques Conseils (Crédit - Luc Mcneice,VdesmedT,Matt Gallagher,Johann):
Enregistrer tous les médias sur le disque quand vous le pouvez.
L'utilisation de plus grandes tileSizes si le rendu sur TiledLayers
init fréquemment utilisé des tableaux avec des objets de l'espace réservé, alternitively une autre approche de la conception est ce un
Notez que les images de rendu plus rapide qu'un
CGPDFPageRef
Utiliser
NSOperations
ou PGCD et des Blocs de préparer les pages à venir de temps.appelez
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
avantCGContextDrawPDFPage
afin de réduire l'utilisation de la mémoire pendant le dessininit avec votre
NSOperations
avec un docRef est une mauvaise idée (de mémoire), enveloppez-la docRef dans un singleton.Annuler inutile
NSOperations
Quand vous le pouvez, surtout si ils vont être à l'aide de la mémoire, méfiez-vous de laisser des contextes ouverts!Recycler des objets de page en faisant pointeur de swaps ou de détruire inutilisés vues
Fermez tous les Contextes dès que vous n'en avez pas besoin
sur réception de l'avertissement de mémoire de libérer et de recharger la DocRef et n'importe quelle page Caches
D'autres Fonctionnalités de PDF:
-
Obtenir des Liens à l'intérieur d'un PDF (et ici et ici)
La compréhension de l'PDF Rect pour le lien de positionnement
L'obtention de la cible du lien (le numéro de page de l'
/Dest
tableau)
Titre du Document et de mots-clés
Prise en Texte Brut (et ici et Ici et ici (positionnement))
Recherche(et ici) (ne fonctionne pas avec tous les fichiers Pdf (certains montrent des caractères bizarres, je suppose que c'est un problème de codage, mais je ne suis pas sûr) -Crédit BrainFeeder)
CALayer et Hors-Rendu à l'Écran le rendu de la page suivante pour rapide/lisse affichage
La Documentation
- Quartz PDFObjects (Utilisé pour les méta-informations, des annotations, des doigts)
- La part d'abobe technique PDF
Exemple de projets
-
Apple/ ZoomingPDF - zoom,
UIScrollView
,CATiledLayer
-
vfr/ lecteur - zoom, la pagination,
UIScrollView
,CATiledView
- front/ feuilles de pagination avec de belles transitions
- / écrémé - tout ce qu'il semble (PDF lecteur/éditeur de pour OSX)