誰もこれに答えようとしなかったので、まだ解決していないと仮定して、私はそれをバッシュしようと思いました.
まず、アニメーションの状態を格納するプロパティを作成します。すなわち
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;
}
}
次に何が起こるかというと、haltAnimation を true に設定するまで、ステージ 2 のアニメーションが任意の長さだけ続きます。
これはすべてテストされておらず、カフから外れていることに注意してください。他の誰かに、より良いデザイン パターンを提供してもらいます。