我正在尝试创建一个稍微有点扭曲的CAKeyframeAnimation。我想让关键帧动画的一部分循环一段时间,然后直接转到结尾。例如:
Intro: play keyframes 0 to 10
Loop: play keyframes 11 to 15 (repeat for a while)
End: play keyframes 16 to 20CAKeyframeAnimation似乎没有提供足够的灵活性,所以我唯一能想到解决这个问题的方法就是提供3个不同的关键帧动画。
有没有更好的解决方案?
发布于 2011-01-28 06:45:36
既然没有人尝试回答这个问题,并且假设你还没有解决这个问题,我想我应该试一试。
首先,我将创建一个属性来存储动画的状态。即
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;
}
}然后,stage 2动画将持续任意长度,直到您将haltAnimation设置为true。
请注意,这一切都是未经测试的,而且是即兴的。我邀请其他人提供更好的设计模式。
https://stackoverflow.com/questions/2254584
复制相似问题