例如,我有这个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"];
我得不到的是:
A)是自动画开始以来的绝对传递时间的关键时间值吗?
B)是关键时间值,只是说这个特定关键帧需要多少时间?
答案 0 :(得分:12)
docs在这里有点奇怪,但准确无误:
数组中的每个值都是介于0.0和1.0之间的浮点数,并且对应于values数组中的一个元素。 keyTimes数组中的每个元素将相应关键帧值的持续时间定义为动画总持续时间的一部分。每个元素值必须大于或等于先前的值。
基本上,每个值都表示给定关键帧出现在动画中的标准化点。因此,如果关键帧占动画的25%,则值为0.25。文档中令人困惑的部分是它们表明它是一个持续时间,实际上它是一个标准化的时间点。
答案 1 :(得分:4)
keyTimes的值是总持续时间的百分比。有效值介于0和1之间(0%到100%)。您的最后一个值1.6无效。
作为一个例子,如果关键帧应该在动画中0.8秒发生,那么keyTime将为0.5,持续时间为1.6秒。