Modification de la vitesse d'une animation CAKeyframeAnimation en cours

J'ai ajouté un CAKeyframeAnimation avec la key "SpeedBoat" à un CALayer. Maintenant j'essaye de changer la vitesse de l'animation pendant l'animation.

[[self.shipLayer animationForKey:@"SpeedBoat"] setSpeed:([[self.shipLayer animationForKey:@"SpeedBoat"] speed] + deltaTime)]; 

Il semble y avoir une erreur dans cette ligne. Mais je ne reçois pas d'informations de debugging. Quel est le problème ici? Est-il possible de changer la vitesse d'une animation en cours?

Ce serait très bien si quelqu'un pouvait m'aider 🙂

Cordialement xen

Oui, vous pouvez certainement changer la vitesse d'une animation. C'est parce que CAKeyframeAnimation confirme au protocole CAMediaTiming .

Apple explique cela dans son Guide de programmation des types d'animation et de synchronisation .

Jetez un oeil à la section sur Timing, Timespaces, et CAAnimation .

Plus précisément:

La propriété de vitesse d'une animation ou d'une couche spécifie ce facteur d'échelle: par exemple, une animation de 10 secondes attachée à une couche avec un espace de time ayant une valeur de vitesse de 2 prend 5 secondes à afficher (deux fois la vitesse). une sous-couche de cette couche définit également un facteur de vitesse de 2, alors ses animations afficheront en 1/4 le time (la vitesse de la super couche * la vitesse de la sous-couche). "

Pourrais-je aussi vous indiquer d'excellentes videos sur ce sujet? Jettes un coup d'oeil à:

Sessions de la WWDC 2010 424 et 425 Animation de base en pratique Parties 1 et 2

WWDC 2011 Session 421 Core Animation Essentials

et

Développeur Vidéos Session 716 Core Techniques d'animation pour iPhone et Mac

Vous pouvez même modifier la vitesse d'une animation pour la "geler" efficacement. C'est très utile pour faire une pause et reprendre. Bien qu'un inconvénient est qu'il ne se comportera pas correctement si l'application est arrière-plan, ou purgé de la memory. Que vous devrez gérer manuellement.

Voir le QA1673 technique Q & A , et ma réponse à cette question pour plus d'informations sur ce process:

Y a-t-il un problème avec la mise à jour d'une position CALayer lorsque la couche est en pause?