我正在尝试创建一个有点扭曲的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个不同的关键帧动画。
那里有更好的解决方案吗?
答案 0 :(得分:2)
由于没有人去回答这个问题而且假设你还没有解决它,我想我会给它一个重击。
首先,我将创建一个存储动画状态的属性。即
NSUIneteger animationState;
哪些商店: 0 = idleState; 1 = startState; 2 =循环状态; 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。
请注意,这一切都是未经测试的并且不在袖口上。我邀请其他人提供更好的设计模式。