Wie kann ich den Animationsstil eines modalen UIViewControllers ändern?


69

Ich zeige derzeit einen UIViewController wie folgt an:

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

und verstecke es so:

[self.navigationController dismissModalViewControllerAnimated:YES];

Die Animation lautet "von unten nach oben schieben" ... und dann wieder nach unten schieben. Wie kann ich den Animationsstil ändern? Kann ich es ein- / ausblenden lassen?

Prost!

Antworten:


60

Marcus Zarra hat eine großartige Lösung dafür auf der SDK-Mailingliste veröffentlicht:

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 zum Umblättern und Einrollen von Seiten. Wenn Sie auf Überblenden eingestellt sind, können Sie versuchen, das Alpha Ihrer neuen Ansicht anzupassen:

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];

Was Sie jedoch wahrscheinlich wollen, ist eine Überblendung oder zumindest eine Überblendung. 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 dessen Alpha im Laufe der Zeit einblenden.

Hinweis: Wenn Sie sich nicht in Ihrer App befinden, funktioniert der Delegat [Selbstfenster] nicht. Verwenden Sie self.view.window, dank des Beitrags von user412500, um darauf hinzuweisen.


5
Das ist alt! Siehe die Antwort von Simo Salminen unten! MrDatabase Sie sollten dies wechseln
Adam Waite

194

Für das iPhone 3.0+ ist eine einfache Überblendung am einfachsten wie folgt:

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

2
Funktioniert perfekt!!! Es dauerte ein paar Sekunden, bis mir klar wurde, dass der Übergang auf den ViewController angewendet werden muss, der präsentiert wird, und nicht auf sich selbst.
Looneydoodle

Sie können dies im Interface Builder tun, indem Sie beispielsweise einen modalen Übergang hinzufügen und den Übergang auf festlegen Cross Dissolve.
Paulvs

8

So aktualisieren Sie das Alpha-Fading in iOS 4:

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

2

Es sollte sein [self.view.window], damit der Code funktioniert

(Zumindest ist das in ios 3.2 so)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.