(iOS 5.0)

Mam CAKeyframeAnimation dodany do warstwy widoku z nieskończoną liczbą powtórzeń (miga kursor). Jednak podczas przełączania aplikacji i powrotu animacja zostaje usunięta z warstwy (lub ewentualnie cała warstwa zostaje zastąpiona, nie jestem pewien).

Próbowałem dodać je ponownie na viewDidLoad i viewWillAppear, ale żadne z nich nie jest wywoływane podczas przełączania aplikacji. Znalazłem tam metodę applicationWillEnterForeground: w UIApplicationDelegate. Planuję to wykorzystać, ale mam dwa pytania:

  • Czy istnieją inne okoliczności, które powodują wyładowanie animacji lub warstwy? Czy jest bardziej odpowiednie wydarzenie do wysłuchania?
  • Jaka jest najlepsza praktyka (w sensie wzorca projektowego) reagowania na te zdarzenia (np. użycie akcji docelowej)?
2
Patrick Pijnappel 15 luty 2012, 17:39

2 odpowiedzi

Najlepsza odpowiedź

Podczas przełączania aplikacji lub kontrolerów widoku system pozwoli zatrzymać animacje na warstwie (zakończyć), więc możesz ustawić removedOnCompletion na NO (domyślnie YES) i będzie Praca.

3
Steve Wilford 26 sierpień 2015, 09:13

Masz rację, że będziesz musiał ponownie dodać animacje do CALayer, gdy aplikacja ponownie pojawi się na pierwszym planie.

Musisz je usunąć, gdy otrzymasz oddzwonienie applicationWillResignActive. Jeśli chcesz, możesz sprawdzić presentationLayer, aby uzyskać aktualnie renderowane — lub tak blisko — właściwości na ekranie.

Następnie, gdy Twoja aplikacja stanie się ponownie aktywna zgodnie z wywołaniem zwrotnym applicationDidBecomeActive, dodaj animacje od nowa.

Twoja aplikacja może przejść z aktywnej do nieaktywnej z wielu powodów, m.in. odbieranie połączenia, SMS-a, alarm, użytkownik naciśnie przycisk home itp.

Spójrz na moją odpowiedź na to pytanie, w której omawiam niektóre problemy związane z wznowieniem CAAnimation:

Przywracanie animacji w miejscu, w którym została przerwana po wznowieniu aplikacji z tła

2
Community 23 maj 2017, 15:19