2009-01-06 16 views
5

Tengo una situación en la que tengo muchos CALayers que se animan de forma "por turnos". Animo la posición en cada uno de esos CALayers, pero tienen exactamente la misma duración. Una vez que todos los CALayers terminan de animar, se inicia un nuevo "giro" y animan las posiciones cambiantes nuevamente.Usando Core Animation, ¿hay alguna forma de agrupar animaciones para varios CALayers?

La idea es que con una interpolación lineal entre posiciones, y a una velocidad constante, una transición basada en turnos entre estados parece una animación en tiempo real. Esto, sin embargo, es difícil de lograr con muchos CALayers diferentes.

CAAnimationGroup se utiliza para agrupar animaciones en un solo CALayer. Pero me preguntaba, ¿hay alguna solución simple para las animaciones grupales, que se supone que tienen la misma duración, en varios CALayers juntos?

vez haya incluido en una respuesta a la pregunta de Kevin Ballard

Mi problema radica en esto. Estoy creando animaciones para cada uno de mis CALayers, luego coloco en un NSArray. Una vez que recibo la devolución de llamada de que la animación individual ha finalizado, la elimino de NSArray. Una vez que está vacío, nuevamente creo animaciones para todos ellos.

Con más de unas pocas capas, hay un retraso notable entre el final de todas las animaciones y el inicio de las nuevas.

Imagino que si pudiera agrupar todas estas animaciones en una sola, se podrían animar muchas más capas sin demoras entre animaciones. De este modo, no se arruinan las ilusiones de una animación contigua.

Respuesta

5

Si adjunta animaciones a múltiples CALayers en un solo método, todos comenzarán (efectivamente) al mismo tiempo. Utilizo este enfoque en un juego de rompecabezas con bolas que caen, al final de las animaciones adjunto la siguiente etapa de la animación a cualquier bola que necesite más animación.

Estoy animando hasta 60 CALayers a la vez y sin experimentar retrasos entre etapas de la animación, pero no guardo las animaciones en una matriz de ningún tipo, no estoy seguro de la sobrecarga que tiene ahí.

Mis animaciones son relativamente simples, y se crean y se adjuntan a cada CALayer sobre la marcha. Mis sprites son 60 píxeles cuadrados y usan un par de docenas de imágenes posibles para representar su contenido.

En algunos casos hay animaciones múltiples que puedo crear con diferentes horas de inicio (usando beginTime), las combino con un CAAnimationGroup, pero es posible que no pueda precalcular las animaciones posteriores.

0

Si agrega 3 animaciones a 3 capas diferentes, todas al mismo tiempo, y tienen la misma duración, esperaría que todas animaran juntas. ¿Qué comportamiento estás viendo?

+0

He editado una respuesta a esta pregunta en la pregunta principal, ya que no cabía aquí. –

2

Si ajusta sus animaciones en una CATransaction, CG se asegurará de que todas se ejecuten durante la misma iteración del ciclo principal.

[CATransaction begin]; // todas sus animaciones [CATransaction commit];

0

cp21yos: ¿puede explicar su método? Estoy tratando de hacer algo similar, que implica animar varias capas a la vez, más de una vez. Usted dijo: "al final de las animaciones adjunto la siguiente etapa de la animación". ¿Puedes explicar eso?Cuando trato de poner lógica para realizar animaciones adicionales en un evento animationDidStop, solo aparece la última animación, en lugar de toda la secuencia de animaciones.

Cuestiones relacionadas