嗨我正在从多个图像创建一个关键帧动画。我的问题是我希望动画能够立即从一个图像变为另一个图像而不是淡入淡出。
CALayer *animLayer = [CALayer layer];
animLayer.bounds = CGRectMake(0, 0, width, height);
animLayer.position = CGPointMake(0, 0);
CAKeyframeAnimation *customFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
NSArray *sizeValues = [NSArray arrayWithObjects:(id)image1, (id)image2, nil];
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], nil];
NSArray *timingFunctions = [NSArray arrayWithObjects: [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault], [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault], nil];
[customFrameAnimation setValues:sizeValues];
[customFrameAnimation setKeyTimes:times];
customFrameAnimation.duration=5.0;
customFrameAnimation.beginTime = 1e-100;
customFrameAnimation.fillMode = kCAFillModeRemoved;
customFrameAnimation.timingFunctions = timingFunctions;
customFrameAnimation.removedOnCompletion = YES;
[animLayer addAnimation:customFrameAnimation forKey:nil];
提前致谢。
答案 0 :(得分:13)
您的动画需要将其calculateMode设置为kCAAnimationDiscrete。
查看描述了如何使用calculateMode的documentation on keyTimes:
keyTimes中的适当值 数组取决于 calculationMode属性。
如果calculateMode设置为 kCAAnimationLinear,第一个值 数组必须是0.0,最后一个 值必须为1.0。价值观是 在指定的键之间插值 倍。
如果设置了calculateMode 至 kCAAnimationDiscrete ,第一个 数组中的值必须为0.0。
如果 calculationMode设置为 kCAAnimationPaced或 kCAAnimationCubicPaced,keyTimes 数组被忽略。
如果值在 keyTimes数组无效或 不适合计算模式, keyTimes数组被忽略。
然后你可以阅读计算模式的描述:
价值计算模式
这些常量被使用 calculationMode属性。
NSString * const kCAAnimationLinear;
NSString * const kCAAnimationDiscrete;
NSString * const kCAAnimationPaced;
<强>常量强>
kCAAnimationLinear
简单线性 关键帧值之间的计算 适用于Mac OS X v10.5及更高版本。 在CAAnimation.h中声明。
kCAAnimationDiscrete
依次使用每个关键帧值,不进行插值 计算值。 可用 Mac OS X v10.5及更高版本。 在CAAnimation.h中声明。
kCAAnimationPaced
对关键帧值进行插值以产生偶数 整个动画的节奏。
适用于Mac OS X v10.5及更高版本。 在CAAnimation.h中声明。
换句话说,离散计算模式使动画跳转到每个关键帧而不是动画/过渡到它。
最好的问候。