2010-06-09 5 views
0

Salut, j'ai deux CALayers (* layer1 et * layer2). Ce que je veux, c'est commencer l'animation sur layer2 quand 50% du temps d'animation de layer1 s'est écoulé. Comment puis-je y parvenir?Comment coordonner les temps d'animation sur plusieurs CALayers?

J'ai essayé d'utiliser CAAnimationGroup mais cela ne fonctionne que pour les animations dans le même calque. J'ai trouvé une solution de contournement dans laquelle vous devez d'abord ajouter l'animation retardée à un groupe et définir la propriété beginTime, mais cela me semble un peu hack et j'aimerais savoir s'il y a une bonne façon de réaliser ce que je veux.

Merci!

Répondre

0

La méthode d'ajout de la deuxième animation à un groupe est un peu un hack, mais cela fonctionne et est parfaitement acceptable. Ce que vous pourriez faire à la place si vous préférez, cependant, c'est d'appeler -performSelector: withObject: afterDelay. Quelque chose comme ceci:

- (void)startFirstAnimation; 
{ 
    CGFloat duration = 10.0; 

    CABasicAnimation *firstAnim = 
      [CABasicAnimation animationWithKeyPath:@"position"]; 
    [firstAnim setFromValue: 
      [NSValue valueWithCGPoint:CGPointMake(30.0f, 30.0f)]]; 
    [firstAnim setToValue: 
      [NSValue valueWithCGPoint:CGPointMake(200.0f, 200.0f)]]; 
    [firstAnim setDuration:duration]; 

    [firstLayer addAnimation:firstAnim forKey:nil]; 

    [self performSelector:@selector(startSecondAnimation) 
       withObject:nil afterDelay:duration/2.0]; 
} 

- (void)startSecondAnimation; 
{ 
    CABasicAnimation *secondAnim = 
      [CABasicAnimation animationWithKeyPath:@"position"]; 
    [secondAnim setFromValue: 
      [NSValue valueWithCGPoint:CGPointMake(100.0f, 30.0f)]]; 
    [secondAnim setToValue: 
      [NSValue valueWithCGPoint:CGPointMake(200.0f, 200.0f)]]; 
    [secondAnim setDuration:5.0]; 

    [secondLayer addAnimation:secondAnim forKey:nil]; 
} 
Questions connexes