UIViewController 容器:允许孩子有不同的方向
Posted
技术标签:
【中文标题】UIViewController 容器:允许孩子有不同的方向【英文标题】:UIViewController container: allow different orientations for childs 【发布时间】:2012-12-10 15:44:48 【问题描述】:已更新:是否可以将一个 UIViewController
(vc1
) 作为容器,将一个 UIViewController
作为孩子 (vc2
)
[vs1 addChildViewController:vc2];
[vs1.view addSubview:vc2.view];
并允许vc2
中的方向更改独立于vc1
支持的方向?
F.e vc1
仅支持纵向,但 vc2
支持所有方向。
我想看到vc2
视图旋转到横向,同时vc1
视图仍然是纵向的。
我有 VC1 和 VC2(弹出窗口)
VC1 仅支持纵向,而 VC2 支持所有方向。
我想在弹出窗口中设置横向
【问题讨论】:
如果父视图不旋转,为什么要让弹出窗口旋转?就因为可以?或者是否有一个有用的用例? 相信我,这对我很有用;) 【参考方案1】:父视图控制器检测到方向。我使用的方法是在父视图控制器中,检测哪个视图是当前活动视图,然后根据它进行定位。
【讨论】:
@Injectios 你能贴一张你的视图的截图吗?【参考方案2】:抱歉,标准行为无法实现您想要的。当 childViewController 支持某个方向时,它的父级和当前层次结构中的所有其他 ViewController 也必须支持该方向。
您应该做的是注册 parentViewController 以接收设备旋转通知,然后基于这些您可以转换 childViewController 的视图。因此,基本上您的应用将始终保持纵向模式,但 childViewController 的视图将被转换为看起来像在横向模式。
像这样注册设备方向通知
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceDidRotate:) name: UIDeviceOrientationDidChangeNotification object: nil];
那就这样处理
// This method gets called everytime the device (!), not the viewController rotates
-(void)deviceDidRotate: (NSNotification*) notification
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
// Animate the transform here based on the orientation
请记住,UIDeviceOrientation 和 UIInterfaceOrientation 是相反的。 UIDeviceOrientationLandscapeLeft = UIInterfaceOrientationLandscapeRight。设备向左旋转,因此用户界面必须向右旋转。
【讨论】:
是的,我正在考虑手动旋转我孩子的视图,但是自动调整蒙版等呢?以上是关于UIViewController 容器:允许孩子有不同的方向的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 和 UIViewController 的导航控制器属性
UIViewController 遏制 - 新孩子不知道旋转