2012-08-17 7 views
7

Próbuję użyć UIViewController's transitionFromViewController: toViewController: metoda duration, ale z niestandardową animacją.Niestandardowa animacja między UIViewControllers za pomocą transitionFromViewController: toViewController: duration

I mają następujące dwa kontrolery widok dodanych dzieci do UIViewController zwyczaj pojemnika:

  1. firstController - jest to przypadek UITabBarController
  2. secondController - Jest to podklasa UIViewController

Poniższy kod działa zgodnie z oczekiwaniami:

Chciałbym jednak utworzyć niestandardową animację, gdzie miejsce, w którym firstController przesuwa się w lewo i jest zastępowane przez secondController przesuwając od prawej strony, podobnie jak metody UINavigationControllers push and pop. Po zmianie options na UIViewAnimationOptionTransitionNone próbowałem zaimplementować niestandardowe animacje w bloku animations, ale nie odniosłem żadnego sukcesu. firstController jest natychmiast zamieniany na secondController bez animacji.

Byłbym wdzięczny za każdą pomoc.

Dziękujemy

Odpowiedz

15

To jest naprawdę bardzo proste. Z jakiegoś powodu założyłem, że widok secondController będzie poniżej/poniżej tego z firstController. Próbowałem tylko animować widok firstController. To oczywiście jest złe. Gdy tylko transitionFromViewController:toViewController:duration zostanie nazwany secondController, widok zostanie umieszczony nad widokiem firstController. Poniższy kod działa:

CGFloat width = self.view.frame.size.width; 
CGFloat height = self.view.frame.size.height; 

secondController.view.frame = CGRectMake(width, 0, width, height); 

[self transitionFromViewController:firstController 
    toViewController:secondController 
    duration:0.4 
    options:UIViewAnimationOptionTransitionNone 
    animations:^(void) { 
     firstController.view.frame = CGRectMake(0 - width, 0, width, height); 
     secondController.view.frame = CGRectMake(0, 0, width, height); 
    } 
    completion:^(BOOL finished){ 
     [secondController didMoveToParentViewController:self]; 
    } 
]; 
+6

Należy wywołać [secondController didMoveToParentViewController: self]; również w obsłudze końcowej :) – banDedo

+1

@banDedo I zaktualizowałem kod z tym. Dziękuję za wskazanie tego. Potrzebne to! –

+0

banDedo i Shaun F. Dzięki za sugestię i edycję. – Simple99

Powiązane problemy