带有Transition的UIModalPresentationCurrentContext?

时间:2012-10-04 21:37:15

标签: iphone objective-c ipad uimodaltransitionstyle uimodalpresentationstyle

我正在尝试模态呈现如下所示的视图控制器:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:vc animated:YES];

现在使用UIModalPresentationCurrentContext表示我可以使用透明背景显示此视图,并查看新视图背后的其他视图。然而,它阻止我能够通过过渡呈现它。

任何想法为什么?或者我如何解决这个问题?感谢。

3 个答案:

答案 0 :(得分:25)

我能够通过在我的UIWindow的rootViewController上设置modalPresentationStyle = UIModalPresentationCurrentContext来实现这一点,如果我没有在这个rootViewController之上提供任何新的全屏viewControllers。我做了这样的事情:

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

我已经尝试使用UINavigationController作为我的窗口的rootViewController和各种其他自定义视图控制器。看起来只要窗口的rootViewController知道发生了什么,任何子视图控制器都可以调用presentViewController:animated:completion:而不会使底层视图变黑。

但是,假设您在窗口的rootViewController顶部显示另一个viewController。这个新的viewController呈现modalPresentationStyle = UIModalPresentationFullScreen(即占据屏幕),然后你必须在最顶层的viewController上调用modalPresentationStyle = UIModalPresentationCurrentContext

所以回顾一下:

  • 如果你有UINavigationController - > UIViewController(可以推送和弹出),然后在UINavigationController上设置modalPresentationStyle = UIModalPresentationCurrentContext
  • 如果你有UINavigationController - > UIViewController - > new-UIViewController(将modalPresentationStyle设置为UIModalPresentationFullScreen),然后在new-UIViewController上设置modalPresentationStyle = UIModalPresentationCurrentContext

希望这也适合你们!

答案 1 :(得分:11)

全屏模式不允许您查看底层。我知道这很烦人。

从你的代码我假设“addPopover”实际上是一个全屏视图,你将内容作为一个小节,而其余的是透明的。

试试这个:

vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:vc animated:YES completion:NULL];

注意:我建议添加一个低alpha背景颜色,让用户知道当你弹出顶部时,他们无法与视图的其余部分进行交互...

答案 2 :(得分:0)

先生。 T的建议几乎完美,你只是失去了现有的viewcontroller上的过渡动画

由于它还设置了appDelegates rootviewController的演示样式,因此它还将删除从该点呈现的任何视图的过渡动画。

我的修复方法是每当关闭viewcontroller我需要透明背景

时,将AppDelegates rootViewController的演示样式返回到默认值

我有一个关闭presentViewController的按钮,我还使用以下命令将rootViewController的显示样式设置回默认值:

    UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
    rootViewController.modalPresentationStyle = UIModalPresentationFullScreen;

我希望这可以帮助其他人对这个问题感到难过。