Iphone 为什么忽略我的动画值?

Iphone 为什么忽略我的动画值?,iphone,core-animation,cakeyframeanimation,Iphone,Core Animation,Cakeyframeanimation,我尝试为旋转层执行一个关键帧动画: CALayer* theLayer = myView.layer; CAKeyframeAnimation* animation; animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; animation.duration = 1.0; animation.cumulative = NO; animation.re

我尝试为旋转层执行一个关键帧动画:

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"];
正如您在注释中所看到的,动画仅运行两个关键帧,但不是所有关键帧。无论我在那里输入了什么类型的值,动画都不会运行超过两个关键帧


有什么问题吗?

可能是您将animation.duration设置为1,但关键时刻分别为0、0.2和2。。。这意味着动画将在达到第三个值之前停止。

可能是因为您将animation.duration设置为1,而关键帧时间分别为0、0.2和2。。。这意味着动画将在达到第三个值之前停止。

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

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