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

带循环的CAKeyframeAnimation
EN

Stack Overflow用户
提问于 2010-02-13 03:37:55
回答 1查看 1.1K关注 0票数 3

我正在尝试创建一个稍微有点扭曲的CAKeyframeAnimation。我想让关键帧动画的一部分循环一段时间,然后直接转到结尾。例如:

代码语言:javascript
复制
Intro: play keyframes 0 to 10
Loop:  play keyframes 11 to 15 (repeat for a while)
End:   play keyframes 16 to 20

CAKeyframeAnimation似乎没有提供足够的灵活性,所以我唯一能想到解决这个问题的方法就是提供3个不同的关键帧动画。

有没有更好的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2011-01-28 06:45:36

既然没有人尝试回答这个问题,并且假设你还没有解决这个问题,我想我应该试一试。

首先,我将创建一个属性来存储动画的状态。即

代码语言:javascript
复制
NSUIneteger animationState; 

存储:0= idleState;1= startState;2= loopedState;3= endState;

我也会创建BOOL来决定何时停止循环动画;

代码语言:javascript
复制
BOOL haltAnimation;

然后,将animationState初始化为0。开始动画时,创建第一个CAAnimation对象,并确保将代理设置为self。将haltAnimation初始化为false;

在您的animationDidStart方法中(根据您的委托实现的要求)具有如下内容:

代码语言:javascript
复制
-(void)animationDidStart {
    switch(animationState) {
        case 0:
            animationState = 1;
            break;
        case 1:
            animationState = 2;
            break;
        case 2:
            if(haltAnimation)
                animationState = 3;
    }
}

然后在动画完成的代理方法中,执行如下操作:

代码语言:javascript
复制
-(void)animationDidFinish {
    swtich(animationState) {
        case 1:
            /*apply stage 2 animation and assign delegate to self*/
            break;
        case 2:
            if(!haltAnimation) {
                /*apply stage 2 animation and assign delegate to self*/
            } else {
                /*apply stage 3 animation and assign delegate to self*/
            }
            break;
        case 3:
            animationState = 0;
            break;
    }
}

然后,stage 2动画将持续任意长度,直到您将haltAnimation设置为true。

请注意,这一切都是未经测试的,而且是即兴的。我邀请其他人提供更好的设计模式。

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

https://stackoverflow.com/questions/2254584

复制
相关文章

相似问题

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