2010-01-22 7 views
5

Je commence un agrandissement animé lorsqu'une image est touchée, puis redimensionne la taille normale lorsqu'elle est relâchée. En utilisant setAnimationBeginsFromCurrentState: OUI, l'effet de zoom est agréable et fluide si vous levez votre doigt en l'animant. Cependant, ce que je veux faire est de "verrouiller" la plus grande taille en place si vous avez touché l'image assez longtemps pour que l'animation se termine, mais laissez-la rétrécir comme d'habitude si vous relâchez prématurément.iPhone SDK - comment savoir quand une animation est terminée?

Existe-t-il un moyen de savoir si une animation est en cours ou si une animation particulière est terminée? Je pense que je peux probablement le faire avec un execSelector: afterDelay: call in touchStarted, avec un délai égal à la durée de l'animation et l'annuler si touchEnded arrive trop tôt, mais je ne peux pas imaginer que ce soit la meilleure façon ...?

Répondre

13
- (void)animateStuff { 
    [UIView beginAnimations:@"animationName" context:nil]; 
    [UIView setAnimationDelegate:self]; 
    [self.view doWhatever]; 
    [UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString *)animationID 
       finished:(NSNumber *)finished 
       context:(void *)context 
{ 
    if ([finished boolValue]) { 
     NSLog(@"Animation Done!"); 
    } 
} 
+1

Il m'a fallu un certain temps pour réaliser ce réellement fait ce que je voulais. animationDidStop est appelé si le zoom arrive à l'endroit où il allait, ou si l'animation qui rétrécit prend le dessus. Cependant, la valeur de fini nous dit si elle a fini comme initialement instruit. Puis-je suggérer de changer le corps de animationDidStop dans votre exemple pour: if ([terminé boolValue]) { NSLog (@ "Animation terminée!"); } Ceci est alors une réponse parfaite :) –

0

Je pense que "+ (void) setAnimationDidStopSelector: (sélecteur SEL)" devrait faire ce que vous voulez. Il appellera le sélecteur donné sur votre délégué une fois l'animation terminée.

1

Une autre possibilité:

[UIView animateWithDuration:0.3 animations:^{ 

     myView.transform = CGAffineTransformMakeRotation(M_PI); 

}completion:^(BOOL finished) { 

     NSLog(@"Animation complete!"); 
}]; 
Questions connexes