由于没有人尝试回答这个问题并假设您还没有解决它,所以我想我会给它一个打击。
首先,我将创建一个存储动画状态的属性。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。
请注意,这都是未经测试的,而且是即兴的。我邀请其他人提供更好的设计模式。