iOS:将视图旋转应用于模态视图下的视图控制器

时间:2013-01-19 22:08:11

标签: ios objective-c ipad uiviewcontroller modalviewcontroller

我一直在关注this question上的解决方案,以便显示具有透明背景的视图。我遇到的问题是,一旦显示模态视图控制器,底层视图就不再旋转了。

例如,如果A是我的视图控制器,则B是我的模态视图。问题如下。我目前的设备是纵向显示的,并显示A。然后我以模态方式呈现B。然后我旋转我的设备,B随之旋转,但A保持原样。

有人可以建议如何处理这种轮换,以便底层视图(A)也被轮换了吗?

1 个答案:

答案 0 :(得分:6)

ModalViewController用于中断当前工作流并显示一组新视图。所以当你以模态方式呈现时,在这种情况下,你呈现B,当前活动的Viewcontroller是B而不是A.

ViewController是模型 - 视图 - 控制器(MVC)设计模式中的传统控制器对象。他们还负责用户界面,手势识别,事件管理(例如按钮)和当前视图的对齐。

当您呈现B时,当前的视图控制器从A变为B,因此当您尝试旋转时(如果提供了方向支持),B的视图在其视图控制器处于活动状态时受到影响并响应旋转。通常我们会忽略这些因为视图是不透明的。在您的情况下,视图是透明的,我们注意到A没有响应旋转。

我在iOS6中尝试了上面的例子(来自你提到的那个)

ViewController2 *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

这里A保持纵向模式

当我这样做时,将第二个viewcontroller的视图添加为子视图,A更改为横向

ViewController2 *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"];
vc.view.backgroundColor = [UIColor clearColor];
self.view addSubview:vc.view];

这种情况发生了,因为在第二次试验中,活动的视图控制器是A而不是B,因为B的视图是添加到A的子视图。浏览Apples的文档