2012-04-01 23 views
7

Zawsze uważałem, że Core Animation wykonuje animacje w tle. Kiedy uruchomić ten kod, moje interakcje UI są zablokowane do czasu zakończeniu animacji:Dlaczego -animateWithDuration: delay: options: animations: completion: blocking the UI?

[UIView animateWithDuration:4.5 
         delay:0 
        options:options 
       animations:^{ 
        oldView.alpha = 0; 
        newView.alpha = 1; 
       } 
       completion:^(BOOL finished) { 
        if (finished) { 
         [oldView removeFromSuperview]; 
        } 
       }]; 

Jak widać czas jest długi, więc jest to wyraźnie widoczne, że interakcje UI są blokowane podczas animacji.

Interakcja interfejsu użytkownika zaczyna być blokowana po rozpoczęciu animacji i kończy się blokować po zakończeniu animacji.

Czy istnieje sposób jednoczesnego uruchamiania animacji UIView, aby interakcje interfejsu użytkownika nie były blokowane?

EDIT wyjaśnienie: wiem, że interfejs użytkownika jest zablokowane, bo nie może wchodzić w interakcje z żadnego sterowania na ekranie, dlaczego ta animacja jest uruchomiony. Te inne elementy sterujące nie są powiązane z tym, co jest animowane i nie znajdują się w tej samej gałęzi w hierarchii widoku. Cały interfejs jest blokowany po uruchomieniu animacji. Kiedy ustawię go na 10 sekund, interfejs użytkownika zostanie zablokowany na 10 sekund podczas animacji. Przetestowane z iOS 4.2 na iPhone 4.

+0

Skąd wiadomo, że jest zablokowana? O ile widok ma zero alfa, wszystkie widoki za nim mają wyłączoną interakcję. – CodaFi

+0

Zaktualizowano pytanie, wyjaśniając. –

Odpowiedz

18

Patrząc na dokumentacji UIView, znalazłem to w dziale dyskusyjnym dla tej metody:

Podczas animacji, interakcji użytkownika są tymczasowo wyłączone dla widoków animowany. (Przed iOS 5 interakcje użytkownika są wyłączone dla całej aplikacji.) Jeśli chcesz, aby użytkownicy mogli współdziałać z widokami, włącz stałą UIViewAnimationOptionAllowUserInteraction w parametrze options.

Jeśli chcesz, aby interakcja z użytkownikiem była nadal dozwolona, ​​musisz ustawić tę stałą w parametrze options.

5

Dokumentacja jest twoim przyjacielem :)

UIView Class Reference

Pod animateWithDuration: animacje:

„Podczas animacji, interakcji użytkownika są tymczasowo niedostępne dla widoki są animowane. (Przed iOS 5 interakcje użytkownika są wyłączone dla całej aplikacji.) "

I oczywiście dla wszystkich v iews w animowanym widoku.

+1

Jak mogłem to przegapić !!! Święta krowa. Potrzebuję większych szklanek. Dzięki. –

+0

spróbuj metody jmstone'a z 'UIViewAnimationOptionAllowUserInteraction' - mam nadzieję, że to załatwi :) –

+1

to całkowicie wystarczyło. Uratowałem mój rok. Wspaniały. –

Powiązane problemy