2011-04-11 5 views
10

J'utilise un NSImageView pour afficher un GIF animé avec environ 80 images, chaque image étant 20ms de long. NSImageView peut afficher l'animation GIF juste 'hors de la boîte', mais le problème est qu'il a besoin de trop de CPU, environ 10% en continu (sur mon noyau i5 proc). Instruments montre qu'il passe beaucoup de temps de décodage du processeur GIF.GIF animé dans NSImageView

Pour le rendre plus efficace, je l'ai essayé ce qui suit sans beaucoup de succès:

  • mettre les cadres à l'intérieur d'un QTMovie et jouer (utilise 4% pour mon processus et 15% pour la processus QTKitServer qui joue le film)

  • dessin directement à la vue avec CGContextDrawImage (~ 5% d'utilisation CPU) - Je ne l'ai pas exporter les cadres du GIF, je viens de créer un CGImageRef à partir d'un 30x30px .png j'avais traîner.

Je ne sais pas quoi d'autre à essayer. Sous-classement NSImageView et en quelque sorte la mise en cache des images semble être une bonne idée mais, hélas, je suis un débutant dans Cocoa ... Toutes les idées seraient très appréciées. Merci!

+2

Avez-vous essayé '- [NSImage setCacheMode:]' avec un argument 'NSImageCacheAlways'? –

+2

Suite à votre suggestion, j'ai réécrit ma sous-classe NSImageView et fini avec l'utilisation du processeur à environ la moitié de ce qu'il était auparavant. J'ai vérifié et en utilisant 'setCacheMode:' sur les cadres GIF individuels que je fais défiler ne fait aucune différence visible. Votre contribution m'a quand même aidé, alors merci! –

+0

Comment avez-vous résolu cela? C'est un problème intéressant et j'essaie de m'y attaquer aussi. Qu'avez-vous changé dans votre sous-classe NSImageView? – AlexQueue

Répondre

-3

Découvrez this article par Raphael Schaad. C'est probablement aussi performant que possible sans rien de très compliqué. Le github repo ressemble à iOS mais je ne pense pas que ce sera difficile à mettre en communication.