3

我正在尝试创建一个有点扭曲的 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 个不同的关键帧动画。

有没有更好的解决方案?

4

1 回答 1

2

由于没有人尝试回答这个问题并假设您还没有解决它,所以我想我会给它一个打击。

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

NSUIneteger animationState; 

其中存储:0 = idleState;1 = 开始状态;2 = 循环状态;3 = 结束状态;

我还将创建 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。

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

于 2011-01-27T22:45:35.883 回答