2009-05-12 8 views
3

Je veux faire des animations sophistiquées. Mais je sais seulement animer un bloc de changements. Y a-t-il un moyen d'enchaîner des animations, de sorte que je puisse par exemple faire des changements A -> B -> C -> D -> E -> F (et ainsi de suite), tandis que l'animation principale attend jusqu'à la fin de chaque animation passe ensuite au suivant?Comment puis-je enchaîner des animations dans iPhone-OS?

En particulier, je veux faire ceci: J'ai un UIImageView qui montre un cube.

Phase 1) Cube est à plat sur le sol

Phase 2) Cube tourne légèrement vers la gauche, tandis que l'origine de la rotation est en bas à gauche. Phase 3) Le cube tourne légèrement vers la droite, tandis que l'origine de la rotation se trouve en bas à droite. Ces phases se répètent 10 fois et s'arrêtent à la phase 1). En outre, le tortillement devient moindre avec le temps.

Je sais comment animer UN changement dans un bloc, mais comment pourrais-je faire une chose répétitive avec un code sophistiqué entre les deux? Ce n'est pas la même chose avec le temps. Cela change, puisque le tortillement devient de plus en plus petit jusqu'à ce qu'il s'arrête.

Répondre

4

En supposant que vous utilisez des animations UIView ...

Vous pouvez fournir une méthode animation STOPPED qui est appelé quand une animation est en fait terminée (consultez setAnimationDelegate). Ainsi, vous pouvez avoir un tableau d'animations en attente et prêt à partir. Définissez le délégué puis lancez la première animation. Quand il se termine, il appelle la méthode setAnimationDidStopSelector (en vérifiant le drapeau finished pour s'assurer que c'est bien fait et pas seulement en pause). Vous pouvez également transmettre un contexte d'animation qui pourrait être l'index dans votre file d'animations. Il peut également s'agir d'une structure de données contenant des compteurs afin que vous puissiez ajuster les valeurs d'animation à chaque cycle. Ensuite, il suffit d'attendre que l'un soit terminé, puis de retirer le suivant de la file d'attente.

La même méthode s'applique si vous utilisez d'autres types d'animation. Vous avez juste besoin de mettre en place vos structures de données afin qu'il sache quoi faire après que chacun se termine.

0

Je pense que la réponse à votre question est que vous devez obtenir plus de spécifications sur ce que vous voulez faire. Vous avez clairement une idée en tête, mais plus de détails vous aideront à répondre à votre propre question.

+0

Merci. J'ai ajouté quelques détails. – Thanks

1

Vous devez configurer un délégué d'animation dans vos blocs d'animation. Voir setAnimationDelegate dans la documentation de UIView pour tous les détails.

En substance, votre délégué peut être averti lorsqu'une animation se termine. Utilisez le paramètre de contexte pour déterminer quelle étape de votre animation se termine actuellement (Phase 1, Phase 2, etc.)

Cette stratégie devrait vous permettre d'enchaîner autant de blocs d'animation que vous le souhaitez.

+0

Merci pour cet indice de contexte! A beaucoup aidé! – Thanks

Questions connexes