2009-01-14 3 views
2

Je dois être capable d'afficher une animation sur une image statique. Étant donné que MPMoviePlayer ne vous donne aucun contrôle sur quoi que ce soit d'utile, la seule façon de le faire est d'utiliser plusieurs images statiques, que nous affichons (une par une) pour créer une animation de type "film".Méthode pour animer des images (comme un film) sur l'iPhone sans utiliser MPMoviePlayer

Je sais que nous pourrions utiliser UIImageView pour le faire (en réglant le UIImageView animationImages propriété, puis en appelant DebuterAnimation), mais nous allons avoir plus de 100 images dans notre animation - donc l'utilisation de la mémoire sera maxed .

Est-ce que quelqu'un a de bonnes façons de faire ce genre d'animation? Utiliser Core Animation ou OpenGL? Je suppose que nous aurions besoin de créer un tampon d'image, et comme nous chargeons de nouvelles images, nous affichons des images à partir du tampon d'image ??

Répondre

6

Vous pouvez utiliser une CALayer Core Animation pour héberger votre animation, et inverser une série de CALayers dans et hors de cette couche principale pour effectuer votre animation image par image. Vous pouvez définir le contenu d'une CALayer d'image-frame-hosting sur un CGImageRef en utilisant sa propriété contents. Une série de CALayers contenant vos images pourrait être créé et stocké dans un NSMutableArray comme nécessaire, puis supprimé lorsque vous avez terminé pour minimiser l'utilisation de la mémoire.

Vous pouvez définir la durée de la transition entre les images en enveloppant le replaceSublayer: avec: appel de méthode dans un CATransaction, comme ce qui suit:

[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat:0.25f] // 1/4th of a second per frame 
       forKey:kCATransactionAnimationDuration]; 
[mainLayer replaceSublayer:[imageLayers objectAtIndex:oldImageIndex] with:[imageLayers objectAtIndex:newImageIndex]]; 
[CATransaction commit]; 

Vous pourriez également être en mesure de sortir avec échange et la CGImageRef dans le contenu de votre couche principale, si le temps d'affichage de votre image est suffisamment court.

+0

pouvez-vous s'il vous plaît elabroate votre réponse ou essayer de ce http://stackoverflow.com/questions/18955031/sequencing-image-using-core-animation-recieving-memory-warnings ans –

1

Comme vous l'avez découvert, l'utilisation de UIImageView.animationImages ne fonctionne pas car elle utilise toute votre mémoire système et provoque le blocage de votre application. Vous pouvez utiliser une minuterie et définir la propriété image de UIImageView chaque fois que le minuteur se déclenche, l'objet UIImage que vous utilisez comme contenu doit être chargé chaque fois que le minuteur se déclenche. C'est fondamentalement la même chose que l'approche décrite dans l'autre réponse, sauf qu'elle utilise CALayer au lieu de UIImageView. Charger une image et changer le contenu de l'image chaque fois que la minuterie se déclenche est une bonne approche, mais elle ne sera capable d'obtenir que vos 11 FPS sur un iPhone pour les images en plein écran.

Si vous souhaitez utiliser un exemple de travail qui implémente la logique de commutation UIImageView, téléchargez ce projet d'exemple PNG Animation pour xcode. Je fournis également la bibliothèque AVAnimator, une version optimisée du même type de fonctionnalité, elle prend en charge les formats Quicktime Animation et APNG ainsi que la compression .

0

Pour Animer images dans la séquence,

d'abord prendre une série d'images dont vous avez besoin pour jouer.

Ensuite, donnez ce tableau à l'animation et terminé.

bien Explication Animation in Iphone: Series of images

Questions connexes