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 的帖子指出了这一点。