Puisque personne n'a essayé de répondre à cette question et en supposant que vous ne l'ayez pas encore résolu, j'ai pensé que je lui donnerais un coup de main.
Tout d'abord je voudrais créer une propriété qui stocke l'état de l'animation. à savoir
NSUIneteger animationState;
qui stocke: 0 = idleState; 1 = startState; 2 = loopedState; 3 = état d'extrémité;
Je voudrais également créer BOOL pour déterminer quand arrêter l'animation en boucle;
BOOL haltAnimation;
Ensuite, Initialiser le animationState à 0. Lorsque vous commencez l'animation, créez le premier objet CAAnimation et assurez-vous que vous définissez le délégué à l'auto. Initialiser haltAnimation à false;
Dans la méthode animationDidStart (tel que requis par votre mise en œuvre du délégué) ont quelque chose comme ceci:
-(void)animationDidStart {
switch(animationState) {
case 0:
animationState = 1;
break;
case 1:
animationState = 2;
break;
case 2:
if(haltAnimation)
animationState = 3;
}
}
Ensuite, dans votre méthode déléguée d'animation terminé, faire quelque chose comme ceci:
-(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;
}
}
Alors qu'est-ce arrive, l'animation de l'étape 2 continuera pour une longueur arbitraire jusqu'à ce que vous définissiez haltAnimation à true.
Notez que tout ceci n'a pas été testé et n'a pas été testé. J'invite tout le monde à offrir un meilleur modèle de design.
Merci Nader. J'ai effectivement résolu ce problème avec une solution similaire. Merci d'avoir partagé! –