2010-02-02 9 views
8

Per esempio io ho questo CAKeyFrameAnimation:Che tipo di valore è keyTime in CAKeyFrameAnimation?

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

    animation.duration = 1.6; 
    //animation.cumulative = YES; 
    animation.repeatCount = 1; 
    animation.removedOnCompletion = NO; 
    animation.fillMode = kCAFillModeForwards; 

    animation.values = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0 * M_PI], 
         [NSNumber numberWithFloat:(15.0/180.0) * M_PI], 
         [NSNumber numberWithFloat:(30.0/180.0) * M_PI], // animation stops here... 
         [NSNumber numberWithFloat:(45.0/180.0) * M_PI], // ignored! 
         [NSNumber numberWithFloat:(190.0/180.0) * M_PI], nil]; // ignored! 

    animation.keyTimes = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0], 
          [NSNumber numberWithFloat:0.2], 
          [NSNumber numberWithFloat:0.4], // ignored! 
          [NSNumber numberWithFloat:0.8], // ignored! 
          [NSNumber numberWithFloat:1.6], 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"]; 

Quello che non capisco è:

A) sono i valori di tempo chiave tempo assoluto passati da quando l'animazione è iniziato?

B) sono valori temporali chiave che indicano quanto tempo è necessario utilizzare per questo particolare fotogramma chiave?

risposta

13

Il docs sono formulate un po stranamente qui, ma sono accurate:

Ogni valore nella matrice è un numero decimale compreso tra 0,0 e 1,0 e corrisponde ad un elemento della matrice valori. Ogni elemento nell'array keyTimes definisce la durata del valore del fotogramma chiave corrispondente come frazione della durata totale dell'animazione. Ogni valore di elemento deve essere maggiore o uguale al valore precedente.

Fondamentalmente, ciascun valore indica in quale punto normalizzato dell'animazione si verifica il fotogramma chiave specificato. Quindi se un fotogramma chiave è il 25% nell'animazione, il valore sarà 0,25. La parte confusa dei documenti è che indicano che è una durata, quando in realtà è un punto nel tempo normalizzato.

4

Il valore di keyTimes è una percentuale della durata totale. I valori validi sono compresi tra 0 e 1 (da 0% a 100%). Il tuo ultimo valore di 1.6 non è valido.

Ad esempio, se si suppone che un fotogramma chiave si verifichi per 0,8 secondi nell'animazione, il tempo chiave sarà 0,5 dato la durata di 1,6 secondi.

Problemi correlati