2010-01-22 13 views
5

Rozpoczynam animowane powiększanie po dotknięciu obrazu, a następnie skalowanie go z powrotem do normalnego rozmiaru po zwolnieniu. Korzystając z funkcji setAnimationBeginsFromCurrentState: TAK, efekt powiększenia jest przyjemny i gładki, jeśli podnosisz palec w trakcie animacji.iPhone SDK - jak mogę sprawdzić, kiedy animacja się zakończyła?

Jednakże chcę "zablokować" większy rozmiar w miejscu, jeśli dotknąłeś obrazu wystarczająco długo, aby animacja się zakończyła, ale pozwól mu zmniejszyć się jak zwykle, jeśli zwolnisz przedwcześnie.

Czy istnieje sposób sprawdzenia, czy obecnie trwa animacja lub czy została wykonana konkretna animacja?

Myślę, że mogę to zrobić za pomocą performSelector: afterDelay: call in toucesStarted, z opóźnieniem równym długości animacji i anulowanie go, jeśli touchEnded nastąpi za wcześnie, ale nie mogę sobie wyobrazić, że jest to najlepszy sposób ...?

Odpowiedz

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

Zajęło mi trochę czasu, aby zrealizować to rzeczywiście zrobił to, co chciałem. Parametr animacjaDidStop jest wywoływany niezależnie od tego, czy zbliżanie się do miejsca, do którego zmierza, czy też maleje animacja zmniejszająca. Jednak wartość gotowych mówi nam, czy zakończyła się zgodnie z pierwotnym poleceniem. Mogę zasugerować zmianę treści animacjiDidStop w twoim przykładzie na: if ([finished boolValue]) { NSLog (@ "Animation Finished!"); } To jest idealna odpowiedź :) –

0

Myślę, że "+ (void) setAnimationDidStopSelector: (SEL) selektor" powinien zrobić, co chcesz. Po zakończeniu animacji będzie wywoływać wybrany selektor na twoim delegacie.

1

Inna możliwość:

[UIView animateWithDuration:0.3 animations:^{ 

     myView.transform = CGAffineTransformMakeRotation(M_PI); 

}completion:^(BOOL finished) { 

     NSLog(@"Animation complete!"); 
}]; 
Powiązane problemy