2012-09-15 13 views
9

Mam animację UIView, którą muszę anulować w aplikacji na iOS. Próbowałem tego:Anulowanie animacji UIView - self.view.layer removeAllAnimations nie działa

[self.view.layer removeAllAnimations]; 

Ale to nie zadziałało. Animacja była kontynuowana. Oto mój kod animacji:

[UIView animateWithDuration:1.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
recognizer.view.transform = CGAffineTransformTranslate(recognizer.view.transform, translation.x, translation.y); 
} completion:^(BOOL finished) { 

      NSLog(@"completed animation, now do whatever"); 
     }]; 

Czy ktoś ma pomysły, dlaczego nie działa?

+2

możliwość dodawania animacji do tej Rozpoznawania pogląd, stąd trzeba będzie usunąć go z warstwą tego samego widoku za. Więc zamiast [self.view.layer removeAllAnimations] możesz chcieć [recoger.view.layer removeAllAnimations]. – Till

+1

Witam. Dzięki - coś się teraz dzieje, ale to wprowadza kolejny problem. Trwa animacja do końca, natychmiast ją zatrzymując. Chcę, aby zatrzymał się w bieżącej pozycji - pozycja, w której się znajduje, kiedy chcę zatrzymać animację - a nie skakać do końca. Czy można to zrobić tak? –

+2

Sprawdź "recognise.view.layer.presentationLayer". Będzie miał środkową transformację, po prostu ustawi ją na bieżącej warstwie: 'recogna.view.layer.transform = recognition.view.layer.presentationLayer.transform;' ... Może potrzebować więcej pracy. – Mazyod

Odpowiedz

10

Dodajesz tę animację do widoku przeglądarki, dlatego musisz ją usunąć z warstwy tego samego widoku.

Więc zamiast

[self.view.layer removeAllAnimations]; 

może chcesz

[recognizer.view.layer removeAllAnimations]; 

i utrzymać aktualny stan transformacji, przynieś, że jeden z warstwy prezentacji. Warstwa prezentacji jest tą, która odzwierciedla zmiany podczas animacji.

recognizer.view.layer.transform = recognizer.view.layer.presentationLayer.transform; 
+1

Dzięki za pierwsze 2. Problem z ostatnią sekcją dotyczącą zachowania statusu . Zyskaj ten błąd: "Nie znaleziono transformacji" właściwości obiektu typu "id" " –

3

OK - właśnie to wymyśliłem. Zmieniono komponent beng animowany z rozpoznawacza gestów na widok obrazu do samego widoku obrazu. Teraz, tuż przed kodem, aby zatrzymać animację, mam:

truckView.frame = [[trackView.layer presentationLayer] frame]; 
[truckView.layer removeAllAnimations]; 

To jest sposób na zrobienie tego. Dzięki za pomoc, która doprowadziła mnie do tej odpowiedzi,

Sam

+0

Używam tego, ale zaczynam myśleć, ponieważ dostaje klatkę przed usunięciem wszystkich animacji, animacja faktycznie trwa trochę i ramka, która został ustawiony jest nieaktualny – MobileMon

Powiązane problemy