UIGraphicsGetCurrentContext semble retourner nil
Je suis en train de convertir les documents PDF pages en format Png ici, et il a parfaitement fonctionné jusqu'à UIGraphicsGetCurrentContext soudainement commencé de retour nul.
Je suis en train de revenir sur mes pas ici, mais je ne suis pas tout à fait sûr que je sais à quel point ce qui s'est passé. Mon image n'est pas 0, que je vois pourrait créer ce problème, mais d'autres que tout ce qui "semble" correct.
Voici le début de mon code.
_pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)_pdfFileUrl);
CGPDFPageRef myPageRef = CGPDFDocumentGetPage(_pdf, pageNumber);
CGRect aRect = CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox);
CGRect bRect = CGRectMake(0, 0, height / (aRect.size.height / aRect.size.width), height);
UIGraphicsBeginImageContext(bRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
Quelqu'un a une idée de ce qui pourrait être à l'origine du nil contexte?
Vous devez vous connecter pour publier un commentaire.
En effet, il est possible d'avoir CGContextRef objet réutilisable après qu'elle a été définie dans la méthode drawRect.
Le point est que vous devez pousser le Contexte de la pile avant de l'utiliser à partir de n'importe où. Sinon, contexte actuel sera 0x0
1. Ajouter
2. Dans votre @mise en œuvre première série renderFirst à VRAI avant vue est apparu sur l'écran, puis:
3. Le rendu quelque Chose pour le contexte après le contexte a été défini.
Voici un exemple correspondant exactement le fil de cas:
Et le Dessin de l'image à partir du contexte qui a été prise avant dans ce post:
Ne pas appeler UIGraphicsPopContext() fonction jusqu'à ce que vous avez besoin du contexte pour rendre vos objets.
Il semble que CGContextRef est supprimé à partir du haut de la pile graphique automatiquement lors de l'appel de la méthode finitions.
De toute façon, cet exemple semble être une sorte de Hack - pas prévus et proposés par Apple. La solution est très instable et ne fonctionne qu'avec la méthode directe, des messages d'appels à l'intérieur d'un seul UIView qui est sur le haut de l'écran. En cas de "performselection" appels, le Contexte ne rend pas les résultats à l'écran. Donc, je suggère l'utilisation de CALayer que d'un rendu à l'écran de la cible au lieu de direct graphique contexte d'utilisation.
Espérons que cela aide.
Il n'a pas à être appelé à partir de "drawRect".
vous pouvez également appeler après "UIGraphicsBeginImageContext(bRect.taille);"
Case dans la ligne suivante
si bRect.la taille n'est pas 0,0
Dans mon cas, c'était la raison pourquoi le retour de contexte sur la ligne suivante a été nulle.
Faites-vous appel à UIGraphicsGetCurrentContext() à l'intérieur de la méthode drawRect? Autant que je sache, il ne peut être appelé à l'intérieur drawRect, sinon il va juste retourner nil.