2012-08-17 4 views
7

Ich versuche UIViewController TransitionFromViewController zu verwenden: toViewController: Dauer-Methode, aber mit einer benutzerdefinierten Animation.Benutzerdefinierte Animation zwischen UIViewControllers mit TransitionFromViewController: toViewController: Dauer

Ich habe die folgenden zwei View-Controller als Kinder zu einem UIViewController Custom Container hinzugefügt:

  1. firstController - Dies ist eine Instanz von UITabBarController
  2. secondController ist - Dies ist eine Unterklasse von UIViewController

Der folgende Code funktioniert wie erwartet:

[self transitionFromViewController:firstController 
        toViewController:secondController 
          duration:2           
          options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:^(void){} 
         completion:^(BOOL finished){}]; 

Allerdings möchte ich eine benutzerdefinierte Animation erstellen, wo die firstController Schieberegler auf der linken Seite und ersetzt durch secondController schieben von rechts ähnlich wie Push- und Pop-Methoden UINavigationControllers arbeiten. Nach dem Ändern der options zu UIViewAnimationOptionTransitionNone habe ich versucht, benutzerdefinierte Animationen im animations Block zu implementieren, aber hatte absolut keinen Erfolg. firstController wird sofort für secondController ohne und Animationen getauscht.

Ich würde wirklich jede Hilfe zu schätzen wissen.

Vielen Dank

Antwort

15

Das ist eigentlich wirklich einfach. Aus irgendeinem Grund nahm ich an, dass die Ansicht secondController unter/hinter dem von firstController liegen würde. Ich hatte nur versucht, die firstController Sicht zu animieren. Das ist natürlich falsch. Sobald transitionFromViewController:toViewController:durationsecondController heißt, wird die Ansicht über firstController angezeigt. Der folgende Code funktioniert:

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

Sie sollten [secondController didMoveToParentViewController: self]; auch im Completion Handler :) – banDedo

+1

@banDedo Ich habe den Code damit aktualisiert. Danke, dass du darauf hingewiesen hast. Brauchte das! –

+0

banDedo & Shaun F. Danke für den Vorschlag und die Bearbeitung. – Simple99

Verwandte Themen