2010-02-02 6 views
8

Zum Beispiel habe ich diese CAKeyframeAnimation:Welche Art von Wert ist keyTime in einer 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"]; 

Was ich nicht bekommen, ist:

A) sind wichtige Zeitwert absolut vergangene Zeit seit der Animation begonnen hat?

B) sind wichtige Zeitwerte, die nur sagen, wie viel Zeit für diesen bestimmten Schlüsselrahmen zu verwenden ist?

Antwort

13

The docs sind ein wenig ungewöhnlich hier formuliert, sind aber genau:

Jeder Wert in dem Array ist eine Gleitkomma-Zahl zwischen 0,0 und 1,0, und entspricht in der Werte-Array zu einem Element. Jedes Element im keyTimes-Array definiert die Dauer des entsprechenden Keyframe-Werts als Bruchteil der Gesamtdauer der Animation. Jeder Elementwert muss größer oder gleich dem vorherigen Wert sein.

Grundsätzlich gibt jeder Wert an, an welchem ​​normierten Punkt in der Animation der gegebene Keyframe auftritt. Wenn also ein Keyframe 25% in der Animation ist, wäre der Wert 0,25. Der verwirrende Teil der Dokumente zeigt an, dass es eine Dauer ist, in der es sich tatsächlich um einen normalisierten Zeitpunkt handelt.

4

Der Wert von keyTimes ist ein Prozent der Gesamtdauer. Gültige Werte liegen zwischen 0 und 1 (0% bis 100%). Dein letzter Wert von 1,6 ist ungültig.

Als ein Beispiel, wenn ein Keyframe 0,8 Sekunden in der Animation passieren soll, würde keyTime 0,5 sein, die Dauer von 1,6 Sekunden gegeben.