69

我目前正在显示这样的 UIViewController:

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

并像这样隐藏它:

[self.navigationController dismissModalViewControllerAnimated:YES];

动画是“从底部向上滑动”......然后向下滑动。如何更改动画样式?我可以让它淡入/淡出吗?

干杯!

4

4 回答 4

194

对于 iPhone 3.0+,基本的淡入淡出是最容易做到的:

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
                                               animated:YES];
于 2010-01-05T14:43:52.050 回答
60

Marcus Zarra 在 SDK 邮件列表上发布了一个很好的解决方案:

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

有翻转和卷页的过渡。如果您设置为淡入淡出,可以尝试调整新视图的 alpha:

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

但是,您可能想要的是交叉淡入淡出,或者至少是淡入淡出。当 UINavigationController 切换到新视图时,它会删除旧视图。对于这种效果,您最好向现有的 UIViewController 添加一个新视图并随着时间的推移淡化其 alpha。

注意:如果您不在您的应用程序中,委托 [self window] 将不起作用。使用 self.view.window ,感谢 user412500 的帖子指出了这一点。

于 2008-10-26T01:46:43.357 回答
8

要在 iOS 4 中更新 alpha 淡入淡出:

modalController.view.alpha = 0.0;
[self.view.window.rootViewController presentModalViewController:modalController animated:NO];
[UIView animateWithDuration:0.5
                 animations:^{modalController.view.alpha = 1.0;}];
于 2010-10-08T16:28:08.940 回答
2

应该是[self.view.window]为了让代码工作

(至少在 ios 3.2 中是这样的)

于 2010-09-02T23:41:05.683 回答