(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 odpowiedzi
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.
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
Podobne pytania
Powiązane pytania
Nowe pytania
objective-c
Tego znacznika należy używać tylko w przypadku pytań dotyczących funkcji Objective-C lub zależnych od kodu w języku. Tagi [cocoa] i [cocoa-touch] powinny być używane, aby zapytać o ramy lub klasy Apple. Użyj powiązanych tagów [ios], [macos], [apple-watch] i [tvos] w przypadku problemów specyficznych dla tych platform.