2010-02-02 65 views
0

我嘗試用於旋轉層做CAKeyFrameAnimation:爲什麼我的動畫值被忽略?

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

就像你可以在註釋中看到,動畫只運行兩個關鍵幀,但不是所有的人。無論我在那裏放置什麼樣的價值,動畫永遠不會運行兩個以上的關鍵幀。

有什麼可能是錯的?

回答

4

難道是你將animation.duration設置爲1,而你的keyTimes是0,0.2,然後是2 ...這意味着動畫將在它達到你的第三個值之前停止。

+0

的確可以!那是「bug」。謝謝 – openfrog

1

keyTimes數組只能包含從0.0到1.0的遞增值。這些是通過動畫進度的百分比,而不是幾秒鐘內的原始數字。因此,關鍵幀匹配keyTime 0.5將在動畫中途發生,而不是1/2秒進入動畫(當然,除非你有一秒鐘的動畫)。