2010-01-22 15 views
5

Sto avviando un ingrandimento animato quando viene toccata un'immagine, quindi ridimensionandola alla dimensione normale quando viene rilasciata. Usando setAnimationBeginsFromCurrentState: YES, l'effetto di zoom è piacevole e regolare se si solleva il dito parzialmente attraverso l'animazione.iPhone SDK - Come posso sapere quando è terminata un'animazione?

Tuttavia, ciò che voglio fare è "bloccare" la dimensione più grande sul posto se l'immagine è stata toccata per un tempo sufficiente per il completamento dell'animazione, ma lasciare che si riduca come normale se si rilascia prematuramente.

C'è un modo per sapere se attualmente è in corso un'animazione o se è stata completata una particolare animazione?

Credo di poterlo fare con un performSelector: afterDelay: call in touchStarted, con un ritardo uguale alla lunghezza dell'animazione e annullato se touchEnded arriva troppo presto, ma non riesco a immaginare che sia il modo migliore ...?

risposta

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

Mi c'è voluto un po 'per realizzare questo in realtà ha fatto quello che volevo. animationDidStop viene chiamato se lo zoom arriva dove stava andando, o se l'animazione restringente prende il sopravvento. Tuttavia, il valore di finito ci dice se è finito come originariamente richiesto. Posso suggerire di modificare il corpo dell'animazioneDidStop nel tuo esempio su: if ([finito boolValue]) { NSLog (@ "Animazione finita!"); } Questa è quindi una risposta perfetta :) –

0

Penso che "+ (void) setAnimationDidStopSelector: selettore (SEL)" dovrebbe fare quello che vuoi. Chiamerà il selettore indicato sul tuo delegato una volta completata l'animazione.

1

Altra possibilità:

[UIView animateWithDuration:0.3 animations:^{ 

     myView.transform = CGAffineTransformMakeRotation(M_PI); 

}completion:^(BOOL finished) { 

     NSLog(@"Animation complete!"); 
}]; 
Problemi correlati