为什么忽略我的动画值?

时间:2010-02-02 13:15:07

标签: iphone core-animation cakeyframeanimation

我尝试使用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"];

您可以在评论中看到,动画只运行两个关键帧,但不是全部。无论我放在哪里,动画都不会运行两个以上的关键帧。

那里可能出现什么问题?

2 个答案:

答案 0 :(得分:4)

可能是你将animation.duration设置为1而你的keyTimes是0,0.2然后是2 ......这意味着动画将在它达到你的第3个值之前停止。

答案 1 :(得分:1)

keyTimes数组必须只包含从0.0到1.0的递增值。这些是动画进度的百分比,而不是原始数字(以秒为单位)。因此,关键帧匹配keyTime 0.5将发生在动画的中间,而不是动画的1/2秒(当然,除非你有一秒动画)。