带循环的CAKeyframeAnimation

时间:2010-02-12 19:37:55

标签: core-animation cakeyframeanimation

我正在尝试创建一个有点扭曲的CAKeyframeAnimation。我希望关键帧动画的一部分循环一段时间直到结束。例如:

Intro: play keyframes 0 to 10
Loop:  play keyframes 11 to 15 (repeat for a while)
End:   play keyframes 16 to 20

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

那里有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

由于没有人去回答这个问题而且假设你还没有解决它,我想我会给它一个重击。

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

NSUIneteger animationState; 

哪些商店:     0 = idleState;     1 = startState;     2 =循环状态;     3 = endState;

我还会创建BOOL以确定何时停止循环动画;

BOOL haltAnimation;

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

在你的animationDidStart方法中(根据你的委托实现的要求)有这样的东西:

-(void)animationDidStart {
    switch(animationState) {
        case 0:
            animationState = 1;
            break;
        case 1:
            animationState = 2;
            break;
        case 2:
            if(haltAnimation)
                animationState = 3;
    }
}

然后在动画完成委托方法中,执行以下操作:

-(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;
    }
}

然后会发生什么,第2阶段动画将继续任意长度,直到你将haltAnimation设置为true。

请注意,这一切都是未经测试的并且不在袖口上。我邀请其他人提供更好的设计模式。