2011-01-13 18 views
5

Moja aplikacja ma pasek kart z dwoma różnymi widokami. Na pierwszej karcie jego widok ma animację z ciągłą pętlą.iphone: Ponownie uruchom animację z zapętlaniem, gdy widok jest ukryty, a następnie pojawia się ponownie?

Kiedy klikam na drugą kartę, a następnie wracam do pierwszej, animacja została zatrzymana. Wiem, że mógłbym zacząć to od nowa w metodzie viewWillAppear:, ale problem jest większy. W szczególności animacja zostanie również zatrzymana, jeśli aplikacja przejdzie w stan tła, a następnie powróci na pierwszy plan. W takim przypadku viewWillAppear nie jest wywoływana na pierwszym planie przejścia, więc technika viewWillAppear nie zrobiłaby nic.

Jaki jest najlepszy sposób na poradzenie sobie z taką sytuacją?

Dzięki.

Odpowiedz

4

Aby zachować hermetyzację, słusznie nie chcesz, aby Twój numer AppDelegate wiedział, które widoki wymagają wznowienia animacji. Ale możesz mieć widok, który zawiera rejestr animacji dla odpowiedniego powiadomienia (na przykład w metodzie widoku init) i ponownie uruchomić animację na sobie.

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
     selector:@selector(startAnimation) 
      name:UIApplicationWillEnterForegroundNotification 
     object:nil]; 

... i nie zapomnij wyrejestrowania z centrum powiadomień w metodzie dealloc.

+0

Znacznie lepszy sposób to zrobić! Dzięki. –

0

Można ustawić animację, aby kontynuować w aplikacji applicationWillEnterForeground z AppDelegate. Jeśli masz odwołanie do kontrolera widoku pierwszej karty w AppDelegate, po prostu wywołaj metodę viewWillAppear kontrolera widoku z AppDelegate.

+0

Tak, właśnie to wymyśliłem. Naprawdę nie podobało mi się to rozwiązanie, ponieważ to zmusza mnie do ujawnienia wielu funkcji kontrolera widoku delegatowi aplikacji, który moim zdaniem powinien być ukryty. (Dlaczego delegat aplikacji powinien wiedzieć, czy moje kontrolery widoku mają animacje czy nie?) Ale to działa, więc myślę, że to jest sposób, aby przejść teraz. –

Powiązane problemy