UIViewController容器:允许孩子使用不同的方向

时间:2012-12-10 15:44:49

标签: iphone ios uiviewcontroller uideviceorientation

更新:是否可以将一个UIViewControllervc1)作为容器,将一个UIViewController作为子容(vc2)< / p>

[vs1 addChildViewController:vc2];
[vs1.view addSubview:vc2.view];

并允许vc2中的方向更改独立于vc1支持的方向?

F.e vc1仅支持纵向方向,但vc2支持所有方向。 我希望vc2视图旋转到横向,同时vc1视图仍然是纵向。

F.e我有VC1和VC2(弹出窗口)

Portrait

VC1仅支持纵向,但VC2支持所有方向。

enter image description here

我想要弹出式横向

enter image description here

2 个答案:

答案 0 :(得分:0)

父视图控制器检测到方向。我使用的方法是在父视图控制器中,检测哪个视图是当前活动视图,然后根据它进行定向。

答案 1 :(得分:0)

抱歉,标准行为无法满足您的需求。当childViewController支持某个方向时,其父级和当前层次结构中的所有其他ViewControllers也必须支持该方向。

您应该做的是注册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。设备向左旋转,因此用户界面必须向右旋转。