由于没有人去回答这个问题,并假设你还没有解决它,我想我会给它一个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。
请注意,这是所有未经测试和袖口。我邀请其他人提供更好的设计模式。
谢谢纳德。我实际上用类似的解决方案解决了这个问题。感谢分享! – 2011-01-29 03:56:52