it-swarm.com.de

Wie kann ich den Animationsstil eines modalen UIViewControllers ändern?

Ich zeige gerade einen UIViewController wie diesen an:

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

und verstecke es so:

[self.navigationController dismissModalViewControllerAnimated:YES];

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

Prost!

69
MrDatabase

Marcus Zarra hat eine großartige Lösung für dieses Problem 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. Wenn Sie auf Fading 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 Ansicht entfernt. Für diesen Effekt ist es wahrscheinlich besser, wenn Sie Ihrem vorhandenen UIViewController eine neue Ansicht hinzufügen und das Alpha mit der Zeit einblenden.

Hinweis: Wenn Sie nicht in Ihrer App sind, funktioniert Delegate [self window] nicht. Verwenden Sie self.view.window, und bedanken Sie sich bei user412500 für den Hinweis.

60
Ben Gottlieb

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

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

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;}];
8
Peter DeWeese

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

(Zumindest ist das in ios 3.2 so)

2
user412500