2010-10-26 41 views
5

嗨,我从多个图像创建一个关键帧动画。我的问题是我想动画立即从一个图像更改为下一个,而不是褪色。CAKeyframeAnimation

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

在此先感谢。

回答

13

您的动画将需要将其计算模式设置为kCAAnimationDiscrete。

看一看的documentation on keyTimes它描述了calculationMode如何使用:

在keyTimes的适当值 阵列依赖于 calculationMode属性。

  • 如果calculationMode设置为 kCAAnimationLinear,在 第一个值的数组必须是0.0,最后 值必须是1.0。插值在指定键 次之间的值为 。

  • 如果calculationMode设置 到kCAAnimationDiscrete,阵列中的第一 值必须为0.0。

  • 如果 calculationMode设为 kCAAnimationPaced或 kCAAnimationCubicPaced,所述keyTimes 阵列被忽略。

如果 keyTimes数组中的值是无效的 不适合calculationMode, 的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中声明。

换句话说,离散计算模式使动画跳转到每个关键帧而不是动画/转换到它。

此致敬礼。

+0

谢谢,感谢帮助。我喜欢这个论坛! – user346443 2010-10-30 04:18:09