2010-04-20 5 views
1

Fondamentalement, ce que je veux faire est de copier le contenu déjà rendu (un PDF dessiné dans le contexte graphique de UIView en utilisant CGContextDrawPDFPage()) sur un UIView similaire, sans avoir à re rend le PDF. L'idée est, que je serais alors en mesure d'effectuer une transformation animée sur l'UIView et plus tard de rendre le PDF avec plus de précision. Pour les deux UIViews, j'utilise un CATiledLayer plus grand que l'écran pour rendre plus facile le rendu du PDF lorsque l'utilisateur effectue un zoom avant, si cela fait une différence.Copier le contenu bitmap du contexte d'un UIView à celui d'un autre UIView

Des conseils? Je suis un peu perdu ici.

+0

Après quelques recherches, il ressemble à mon layer.contents est un CAImageProvider, qui semble avoir les données d'image (au moins la résolution sur elle semble correcte). Je n'ai aucune idée de comment l'utiliser. –

Répondre

1

Supposons que vous ayez rendu une page PDF dans un contexte graphique en utilisant le code semblable au suivant

CGPDFDocumentRef document = CGPDFDocumentCreateWithURL (filename_url); 
CGPDFPageRef page = CGPDFDocumentGetPage (document, pageNumber); 
CGContextDrawPDFPage (context, page); 
CGPDFDocumentRelease (document); 

Ce code permettra d'économiser le contenu de pdfview à un UIImage

UIGraphicsBeginImageContext(pdfView.bounds.size); 
[pdfView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *pdfViewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

Encore besoin de re-rendu le PDF, sauf si je le rends à une image tout le temps, ce qui suppose un surcoût considérable. –

+0

En supposant que vous avez déjà rendu le PDF dans le contexte graphique actuel, en utilisant un code similaire à celui que j'ai ajouté à la publication ci-dessus, l'utilisation du code inférieur ne rendra pas le fichier PDF. Imaginez-le comme prendre une capture d'écran de votre bureau. – adam

+0

Hélas, j'ai déjà essayé ça et ça fait en fait re-rendre le PDF. Peut-être dû au fait que j'utilise un CATiledLayer? –