2008-10-26 6 views
69

Ich bin derzeit ein UIViewController wie folgt dargestellt:Wie kann ich den Animationsstil eines modalen UIViewControllers ändern?

[[self navigationController] presentModalViewController:modalViewController animated:YES]; 

und es so versteckt:

[self.navigationController dismissModalViewControllerAnimated:YES]; 

Die Animation ist „von unten nach oben schieben“ ... dann nach unten rutschen zurück. Wie kann ich den Animationsstil ändern? Kann ich es ein- und ausblenden?

Prost!

Antwort

60

Marcus Zarra hat eine große Lösung dieses Problem auf der SDK-Mailingliste:

UIViewController *controller = [[[MyViewController alloc] init] autorelease]; 
UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp; 
[UIView beginAnimations: nil context: nil]; 
[UIView setAnimationTransition: trans forView: [self window] cache: YES]; 
[navController presentModalViewController: controller animated: NO]; 
[UIView commitAnimations]; 

Es gibt Übergänge für Spiegeln und Seiten Curling. Wenn Sie auf Fading festgelegt sind, können versuchen, die neue Ansicht Alpha Einstellung:

UIViewController *controller = [[[MyViewController alloc] init] autorelease]; 
controller.view.alpha = 0.0; 
[navController presentModalViewController: controller animated: NO]; 
[UIView beginAnimations: nil context: nil]; 
controller.view.alpha = 1.0; 
[UIView commitAnimations]; 

Aber was wollen Sie wahrscheinlich eine Überblendung ist, oder zumindest ein Überblendungs. Wenn der UINavigationController zu einer neuen Ansicht wechselt, wird die alte entfernt. Für diesen Effekt ist es wahrscheinlich besser, wenn Sie Ihrem vorhandenen UIViewController eine neue Ansicht hinzufügen und deren Alpha-Wert im Laufe der Zeit ausblenden.

Hinweis: Wenn Sie nicht in Ihrer App sind, wird Delegate [Eigenes Fenster] nicht funktionieren. Verwenden Sie self.view.window, dank des Posts von User412500, um dies zu verdeutlichen.

+5

Dies ist alt! Siehe Simo Salminen's Antwort unten! MrDatabase sollten Sie dies wechseln –

194

für iPhone 3.0+, eine grundlegende Überblendung ist am einfachsten, wie dies zu tun:

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[[self navigationController] presentModalViewController:modalViewController 
               animated:YES]; 
+2

Funktioniert perfekt !!! Ich brauchte ein paar Sekunden, um zu erkennen, dass der Übergang auf den präsentierten viewController und nicht auf self angewendet werden muss. – looneydoodle

+0

Sie können dies in Interface Builder tun, indem Sie beispielsweise einen modalen Übergang hinzufügen und den Übergang auf "Cross Dissolve" setzen. – paulvs

2

Es [self.view.window] sein sollte, um für den Code

(zumindest das ist die Art und Weise zu arbeiten, dass es in ios in iOS 3,2)

8

Schwund 4 für alpha zu aktualisieren:

modalController.view.alpha = 0.0; 
[self.view.window.rootViewController presentModalViewController:modalController animated:NO]; 
[UIView animateWithDuration:0.5 
       animations:^{modalController.view.alpha = 1.0;}]; 
+1

Das hat gut für mich funktioniert. – zekel

Verwandte Themen