J'ai eu un problème où j'ai eu une série de chevauchement CATransition / CAAnimation séquences, toutes dont j'avais besoin pour effectuer des opérations personnalisées lorsque les animations arrêté, mais je voulais seulement un gestionnaire de délégués pour animationDidStop.
Cependant, j'ai eu un problème, il ne semble pas être un moyen d'identifier de manière unique chaque CATransition / CAAnimation dans le animationDidStop délégué.
J'ai résolu ce problème par le biais de la clé / système de valeurs exposées dans le cadre de CAAnimation.
Lorsque vous démarrez votre animation utiliser la méthode setValue sur le CATransition / CAAnimation pour définir vos identifiants et les valeurs à utiliser lors de la animationDidStop les incendies:
-(void)volumeControlFadeToOrange
{
CATransition* volumeControlAnimation = [CATransition animation];
[volumeControlAnimation setType:kCATransitionFade];
[volumeControlAnimation setSubtype:kCATransitionFromTop];
[volumeControlAnimation setDelegate:self];
[volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal];
volumeControlLevel.enabled = true;
[volumeControlAnimation setDuration:0.7];
[volumeControlAnimation setValue:@"Special1" forKey:@"MyAnimationType"];
[[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil];
}
- (void)throbUp
{
doThrobUp = true;
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[animation setSubtype:kCATransitionFromTop];
[animation setDelegate:self];
[hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
[animation setDuration:2.0];
[animation setValue:@"Throb" forKey:@"MyAnimationType"];
[[hearingAidHalo layer] addAnimation:animation forKey:nil];
}
Dans votre animationDidStop délégué:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
if ([value isEqualToString:@"Throb"])
{
//... Your code here ...
return;
}
if ([value isEqualToString:@"Special1"])
{
//... Your code here ...
return;
}
//Add any future keyed animation operations when the animations are stopped.
}
L'autre aspect est qu'il vous permet de garder de l'état dans la valeur de la clé d'appariement système au lieu de le stocker dans votre délégué de classe. Le moins de code, mieux c'est.
Assurez-vous de vérifier la Pomme de Référence sur la Valeur de la Clé de la Paire de Codage.
Sont t-il de meilleures techniques pour CAAnimation / CATransition d'identification dans le animationDidStop délégué?
Merci, --Batgar