代码之家  ›  专栏  ›  技术社区  ›  Martin Cote

带循环的关键帧动画

  •  3
  • Martin Cote  · 技术社区  · 15 年前

    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 回复  |  直到 15 年前
        1
  •  2
  •   Nader Eloshaiker    14 年前

    既然没有人试着回答这个问题,而且假设你还没有解决这个问题,我想我应该痛击一下。

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

    NSUIneteger animationState; 
    

    哪些商店: 1=开始状态; 3=结束状态;

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

    BOOL haltAnimation;
    

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

    -(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。

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

    推荐文章