2010-02-02 70 views
8

例如,我有這個CAKeyFrameAnimation:CAKeyFrameAnimation中keyTime的值是什麼?

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"]; 

我不明白的是:

A)是絕對時間的流逝關鍵時間值,因爲在動畫開始了嗎? B)是關鍵時間值,只是說明這個特定關鍵幀需要多少時間才能使用?

回答

13

docs的措辭一點奇怪在這裏,但準確:

陣列中的每個值是在0.0和1.0之間的浮點數,並且對應於這些值陣列中的一個元件。 keyTimes數組中的每個元素都將相應關鍵幀值的持續時間定義爲動畫總持續時間的一小部分。每個元素值必須大於或等於先前的值。

基本上,每個值都表示給定關鍵幀出現在動畫的標準化點處。所以如果一個關鍵幀在動畫中佔25%,那麼這個值就是0.25。文檔中令人困惑的部分是它們表明它是一個持續時間,實際上它是一個正常化的時間點。

4

keyTimes的值是總持續時間的百分比。有效值介於0和1之間(0%到100%)。你最後一個1.6的值是無效的。作爲一個例子,如果一個關鍵幀應該在動畫中出現0.8秒,那麼在1.6秒的持續時間內keyTime將會是0.5。