2010-02-12 16 views
3

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

有没有更好的解决方案呢?

回答

2

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

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

NSUIneteger animationState; 

,其存储: 0 = idleState; 1 = startState; 2 = loopedState; 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。

请注意,这是所有未经测试和袖口。我邀请其他人提供更好的设计模式。

+0

谢谢纳德。我实际上用类似的解决方案解决了这个问题。感谢分享! – 2011-01-29 03:56:52