Avec Core Animation, existe-t-il un moyen de regrouper des animations pour plusieurs CALayers?

StackOverflow https://stackoverflow.com/questions/418419

  •  03-07-2019
  •  | 
  •  

Question

J'ai beaucoup de CALayers animés d'un "tour par tour". mode. J'anime la position sur chacune de ces couches, mais elles ont exactement la même durée. Une fois que toutes ces CALayers ont fini d’animer, un nouveau " tour " est initié et ils réaniment des changements de positions.

L’idée générale est qu’avec une interpolation linéaire entre les positions et à une vitesse constante, une transition tour par état entre états ressemble à une animation en temps réel. Ceci est cependant difficile à réaliser avec de nombreuses couches différentes.

CAAnimationGroup est utilisé pour regrouper des animations sur une seule couche CAL. Mais je me demandais, existe-t-il une solution simple pour regrouper des animations, qui sont supposées avoir la même durée, sur plusieurs CALayers ensemble?

Modifié pour inclure une réponse à la question de Kevin Ballard

Mon problème réside dans ceci. Je crée des animations pour chacun de mes CALayers, puis je mets ceux dans un NSArray. Une fois que je reçois le rappel que l'animation individuelle est terminée, je la supprime du NSArray. Une fois vide, je crée à nouveau des animations pour tous.

Avec plus de quelques couches, il y a un délai notable entre le début de toutes les animations et le début des nouvelles.

J'imagine que si je pouvais regrouper toutes ces animations en une seule, beaucoup plus de calques pourraient être animés sans délai entre les animations. Ne gâchez donc pas les illusions d’une animation contiguë.

Était-ce utile?

La solution

Si vous associez des animations à plusieurs CALayers au sein d'une même méthode, elles commenceront toutes à la même heure. J'utilise cette approche dans un jeu de casse-tête avec chute de balles. À la fin des animations, j'attache l'étape suivante de l'animation à toute balle qui nécessite une animation supplémentaire.

J'anime jusqu'à 60 CALayers à la fois et je n'éprouve aucun retard entre les étapes de l'animation, mais je ne cache pas les animations dans un tableau d'aucune sorte, je ne suis pas sûr de la charge que vous avez là .

Mes animations sont relativement simples et créées et attachées à chaque CALayer à la volée. Mes sprites ont une taille de 60 pixels et utilisent une vingtaine d’images possibles pour représenter leur contenu.

Dans certains cas, il est possible de créer plusieurs animations avec des heures de début différentes (en utilisant beginTime). Je les associe à un groupe CAAnimation, mais vous ne pourrez peut-être pas pré-calculer les animations suivantes.

Autres conseils

Si vous enregistrez vos animations dans une transaction CATransaction, CG s'assurera qu'elles s'exécutent toutes pendant la même itération de la boucle principale.

[CATransaction begin]; // toutes vos animations [Validation CATransaction];

Si vous ajoutez 3 animations à 3 couches différentes en même temps et qu'elles ont la même durée, je m'attendrais à ce qu'elles s'animent ensemble. Quel comportement observez-vous?

cp21yos: pouvez-vous élaborer sur votre méthode? J'essaie de faire quelque chose de similaire, qui consiste à animer plusieurs couches à la fois, plus d'une fois. Vous avez dit: "à la fin des animations, je joins la prochaine étape de l'animation". Pouvez-vous expliquer ça? Lorsque j'essaie de mettre de la logique pour exécuter des animations supplémentaires dans un événement animationDidStop, seule la dernière animation se produit, au lieu de toute la séquence d'animations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top