2010-02-02 5 views
0

J'essaie de faire une CAKeyFrameAnimation pour faire tourner une couche:Pourquoi mes valeurs d'animation sont-elles ignorées?

CALayer* theLayer = myView.layer; 
    CAKeyframeAnimation* animation; 
    animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; 

    animation.duration = 1.0; 
    animation.cumulative = NO; 
    animation.repeatCount = 1; 
    animation.removedOnCompletion = NO; 
    animation.fillMode = kCAFillModeForwards; 

    animation.values = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0 * M_PI], 
         [NSNumber numberWithFloat:0.5 * M_PI], 
         [NSNumber numberWithFloat:0.3 * M_PI], // animation stops here... 
         [NSNumber numberWithFloat:0.8 * M_PI], // ignored! 
         [NSNumber numberWithFloat:0.7 * M_PI], nil]; // ignored! 

    animation.keyTimes = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0], 
          [NSNumber numberWithFloat:0.2], 
          [NSNumber numberWithFloat:2.0], // ignored! 
          [NSNumber numberWithFloat:1.5], // ignored! 
          [NSNumber numberWithFloat:2], nil]; // ignored! 

    animation.timingFunctions = [NSArray arrayWithObjects: 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
           [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], nil]; 

    [theLayer addAnimation:animation forKey:@"transform.rotation.z"]; 

Comme vous pouvez le voir dans les commentaires, l'animation ne fonctionne que deux des images clés, mais pas tous. Peu importe le type de valeurs que j'y mets, l'animation n'exécutera jamais plus de deux images clés.

Qu'est-ce qui pourrait ne pas fonctionner là-bas?

Répondre

4

pourrait-il que vous définissez le animation.duration à 1 et encore vos keyTimes sont 0, 0,2 et 2 ... ce qui signifie que l'animation s'arrête avant d'atteindre votre valeur 3.

+0

en effet, il pourrait! c'était le "bug". Merci – openfrog

1

la matrice keyTimes ne doit contenir que des valeurs croissantes de 0,0 à 1,0. Ces pourcentages sont des progrès dans l'animation, pas les chiffres bruts en quelques secondes. Ainsi, l'image-clé correspondant à 0,5 keyTime va se passer au milieu de l'animation, pas 1/2 seconde dans l'animation (à moins, bien sûr, vous avez une animation d'une seconde).

Questions connexes