首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAKeyframeAnimation

CAKeyframeAnimation
EN

Stack Overflow用户
提问于 2010-10-26 22:25:48
回答 1查看 7.3K关注 0票数 5

嗨,我正在从多个图像创建一个关键帧动画。我的问题是,我希望动画立即从一个图像切换到下一个图像,而不是淡入淡出。

代码语言:javascript
复制
    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]; 

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-28 13:09:04

动画需要将其calculationMode设定为kCAAnimationDiscrete。

看一下描述如何使用calculationMode的documentation on keyTimes

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

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

诚挚的问候。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4024685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档