我一直在关注this question上的解决方案,以便显示具有透明背景的视图。我遇到的问题是,一旦显示模态视图控制器,底层视图就不再旋转了。
例如,如果A
是我的视图控制器,则B
是我的模态视图。问题如下。我目前的设备是纵向显示的,并显示A
。然后我以模态方式呈现B
。然后我旋转我的设备,B随之旋转,但A
保持原样。
有人可以建议如何处理这种轮换,以便底层视图(A
)也被轮换了吗?
答案 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的文档