2012-11-11 9 views
6

Ich versuche, das Fenster rootViewController mit Animation zu ersetzen und es funktioniert nur teilweise.Replace window.rootViewController mit Animation funktioniert teilweise

ich ein UINavigationController programmatisch -

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"InboxStoryboard" bundle:nil]; 

UIViewController *innerViewController = [storyBoard instantiateViewControllerWithIdentifier:@"centerView"]; 
UINavigationController *centerView = [[UINavigationController alloc] initWithRootViewController:innerViewController]; 

Danach das Fenster Root-View-Controller in einem Animationsblock gewickelt I ersetzen -

[UIView transitionWithView:self.viewController.view.window 
        duration:0.5 
        options: UIViewAnimationOptionTransitionFlipFromLeft 
       animations:^{ 
        self.viewController.view.window.rootViewController = centerView; 
       } 
       completion:nil]; 

Was passiert, ist, dass die Animation passieren, aber der Controller, dass ich erstellen ist nur teilweise sichtbar, werfen Sie einen Blick auf das folgende Bild -

So wie Sie während der Rotation sehen können, wird die Ansicht nur teilweise gerendert.

Wer ist schon einmal auf diese Art von Verhalten gestoßen?

+0

ein Fehler? Löschen Sie die App im Simulator und führen Sie sie erneut aus. – MasterRazer

+0

Was ist Selbst in dem Code, den Sie gepostet haben? Es ist nicht klar, in welcher Klasse Sie diesen Code ausführen. – rdelmar

+0

self ist ein NSObject, das ein anderer UIViewController hat. Der Fluss ist - Instanziieren Sie mein Objekt in einigen anderen UIViewController, verwenden Sie das Objekt, um den Stammansicht-Controller durch einen anderen zu ersetzen. AFAIK das ist ziemlich Standard-Flow, immer noch keine Ahnung, warum es teilweise gerendert wird. Auch wenn ich keine Animation verwende und nur die Grundansicht ersetze, funktioniert es. –

Antwort

16

So nach einer langen Suche fand ich das Problem war in den [UIView transitionWithView:...] ein bisschen mehr in Stackoverflow Suche I Swapping rootViewController with animation perfekt

Mit [UIView transitionFromView:..] Werken.

Der neue Code -

[UIView transitionFromView:self.window.rootViewController.view 
        toView:self.centerViewController.view 
        duration:0.5 
        options:UIViewAnimationOptionTransitionCurlUp 
       completion:^(BOOL finished) 
       { 
        self.window.rootViewController = self.centerViewController; 
       }]; 
+0

Funktioniert dieser Code wirklich? Dies sollte nicht funktionieren, da dies Kompilierungszeit Warnung geben wird ... Sie zuweisen UIView RootViewController-Eigenschaft ... was falsch ist ... Bitte korrigieren Sie Ihre Antwort ... – DShah

+1

Danke, aktualisiert die Antwort –

0

Verwenden Sie Auto-Layout? Wenn ja, versuchen Sie es zu deaktivieren. Ich bin auf mehrere Probleme mit Auto-Layout und Animationen gestoßen.