我怎样才能改变模式UIViewController的animation风格?

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

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

并像这样隐藏它:

 [self.navigationController dismissModalViewControllerAnimated:YES]; 

animation是“从底部向上滑动”,然后向下滑动。 我怎样才能改变animation风格? 我可以让它淡入/淡出吗?

干杯!

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

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

有翻转和页面curl的转换。 如果你设置了淡入淡出,可以尝试调整你的新视图的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]; 

然而,你可能想要的是一个交叉淡入淡出,或者至less淡入淡出。 当UINavigationController切换到新的视图时,它会删除旧的视图。 为了达到这个效果,你可能最好在现有的UIViewController中添加一个新的视图,并随着时间的推移逐渐淡入其中。

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

对于iPhone 3.0+,基本的交叉渐变最容易做到这一点:

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

要更新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;}]; 

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

(至less这是它在ios 3.2中的方式)