2014-04-04 18 views
10

Podczas korzystania z gestów UIPercentDrivenInteractiveTransition z CABasicAnimation (lub innym CAAnimation), po zakończeniu InterServerTransition, animacja przeskakuje do ostatecznej pozycji, a następnie animuje się płynnie, jak ma to miejsce w przypadku korzystania z animacji bloku UIView. Próbuję dowiedzieć się, jak płynnie animować po zakończeniuInteractiveTransition, aby zakończyć przy użyciu CAAnimation.UIPercentDrivenInteractiveTransition Z CABasicAnimation

Spędziłem na nim cały dzień. Wydaje się, że nigdzie nie ma wzmianki o używaniu CAAnimation z niestandardowymi przejściami VC, każdy odnosi się do animacji opartej na blokach UIView.

Mam utworzyć mały przykładowy projekt, który demonstruje problem.

https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation

Dziękuję każdemu, kto spędza czas patrząc na niego. Doceniam to.

+1

Sprawdź repozytorium. Brakuje plików. Projekt nie kompiluje się. – RaffAl

+0

Dziękuję za poświęcenie czasu na spojrzenie. Naprawiłem repozytorium, powinno być wszystko dobrze teraz – stringCode

+0

Czy jest lepsza poprawka dla tego problemu? Jeden bez podklasy 'UIPercentDrivenInteractiveTransition' lub konfigurowania własnego' UIViewControllerInteractiveTransitioning'. –

Odpowiedz

10

ROZWIĄZANIE

Okazuje się, że rozwiązaniem jest manipulowanie warstwami czasu. Zamierzam spróbować wyjaśnić to rozwiązanie nieco bardziej szczegółowo poniżej. Istnieją dwa rozwiązania z wykorzystaniem podklasy UIPercentDrivenTransition lub implementacji protokołu UIViewControllerInteractiveTransitioning. Niestandardowe UIViewControllerInteractiveTransitioning znajduje się w gałęzi głównej, a implementacja UIPercentDrivenTransition znajduje się w gałęzi UIPercentDrivenTransitionImplementation.

https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation

WYJAŚNIENIE

UIPercentDrivenTransition wykorzystuje animacje w animateTransition: wdrożenie updateInteractiveTransition:. Domyślam się, że oni po prostu wywołują animateTransition: z startInteractiveTransition:, a następnie ustawiają warstwę (prawdopodobnie warstwę widoku kontenera) na 0.0 i manipulują jej timeOffSet. Pozwoli im to automatycznie przenieść przejście z powrotem i do przodu. Robi to dla twoich animacji UIView. Problem z CAAnimations polega na tym, że ich właściwości nie zostały poprawnie ustawione z jakiegoś powodu. Jeśli ustawisz te wartości na rozsądne, będziesz w stanie przenieść całą zawartość animowaną w oknie containerView tam iz powrotem. Stworzyłem SCPercentDrivenTransition, który jest alternatywą dla UIPercentDrivenTransition. Musisz tylko zastąpić animateTransition: i wywołać handleGesture: z wywołań akcji rozpoznawania gestów.

+0

co za wspaniałe wyjaśnienie. Dziękujemy – andrei

+1

Myślę, że możesz być jedyną osobą na świecie, która zaimplementowała UIViewControllerInteractiveTransitioning i zademonstrowała, jak możesz jej używać poza standardowym przejściem opartym na procentach. Więc błogosławię cię! – hao

Powiązane problemy