CAKeyframeAnimation

时间:2010-10-26 14:25:48

标签: core-animation 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]; 

提前致谢。

1 个答案:

答案 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中声明。

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

最好的问候。