Usando Core Animation, existe uma maneira de animações grupo por vários CALayers?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma situação onde eu tenho muitos CALayers que animam de uma forma "baseado em turnos". I animar a posição em cada um desses CALayers, mas eles têm a mesma duração exata. Depois de todos esses CALayers está animando acabado, uma nova "virada" é iniciada e animam a mudança de posição novamente.

A idéia é que, com uma interpolação linear entre as posições, e a uma velocidade constante, uma transição baseado em turnos entre Estado aos olhares do estado como uma animação em tempo real. Isso, no entanto, é difícil de alcançar com muitos CALayers diferentes.

CAAnimationGroup é usado para animações agrupar em um único CALayer. Mas eu estava pensando, há uma solução simples para animações do grupo, que deveriam ter os mesmos períodos, em várias CALayers juntos?

editado para incluir uma resposta à pergunta de Kevin Ballard

O meu problema reside nessa. Estou criando animações para cada um dos meus CALayers, em seguida, colocá aqueles em um NSArray. Assim que eu receber a chamada de retorno que a animação individuais terminou, eu removê-lo formar a NSArray. Uma vez que ele está vazio, eu novamente criar animações para todos eles.

Com mais de algumas camadas, há um atraso perceptível entre o local onde todas as animações acabados e os novos começar.

Eu imagino que se eu pudesse grupo todas estas animações em uma única, muito mais camadas poderia ser animada, sem um atraso entre animações. Assim não arruinar as ilusões de uma animação contíguo.

Foi útil?

Solução

Se você anexar animações para vários CALayers dentro de um único método, todos eles vão commence em (efetivamente) ao mesmo tempo. Eu uso essa abordagem em um jogo de quebra-cabeça com soltando bolas, no final das animações I atribuem o próximo estágio da animação para qualquer bola que precisa de mais animação.

Estou animando até 60 CALayers de cada vez e não tendo qualquer tipo de atrasos entre os estágios da animação, mas eu não armazenar em cache as animações em uma matriz de qualquer tipo, não tenho certeza de thge sobrecarga que você tem lá .

As minhas animações são relativamente simples, e criado e anexado a cada CALayer na mosca. Meus sprites são 60px quadrado e usar um par dúzia de possíveis imagens para representar o seu conteúdo.

Em alguns casos, há animações multiplicam que eu posso criar com diferentes tempos de partida (usando beginTime), eu empacotá-los com um CAAnimationGroup -. Mas você pode não ser capaz de precalculate animações subseqüentes

Outras dicas

Se você enrolar suas animações em um CATransaction, CG irá certificar-se que todos os executados durante a mesma iteração do loop principal.

[CATransaction começar]; // todas as suas animações [CATransaction comprometer];

Se você adicionar 3 animações para 3 camadas diferentes, tudo ao mesmo tempo, e eles têm a mesma duração, eu esperaria que todos eles para animar juntos. O comportamento que você está vendo?

cp21yos: você pode elaborar sobre o seu método? Eu estou tentando fazer algo semelhante, que envolve animar várias camadas de cada vez, mais de uma vez. Você disse: "no final das animações eu atribuo a próxima fase da animação". Você pode explicar isso? Quando eu tento colocar a lógica para executar animações adicionais em um evento animationDidStop, apenas a última animação está ocorrendo, em vez de toda a seqüência de animações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top