在UIViewController中只旋转一个UIView(两个)

时间:2014-02-27 18:41:28

标签: ios uiview uiviewcontroller opengl-es-2.0

我有一个GLKViewController,其中包含两个视图:GLKView和透明UIView,显示一些命令。

GLKViewController支持两种设备方向:纵向和横向右侧。

当设备从纵向旋转到横向时,我想:

  • 不要旋转GLKView;
  • 使用命令旋转重叠的UIView。

基本上,GLKView应始终保持纵向,而其他视图应遵循设备方向。

GLKViewController位于NavigationController中。要么我需要让NavigationController在横向上旋转,要么我需要实现一个虚假的导航栏并以编程方式执行'pop'。

我看到了一个简单地旋转视图的解决方案(在收到通知后),但我想让动画保持旋转那个视图。

我尝试使用另一个UIViewController子类,接收GLKViewController和带有命令的View作为两个子UIViewControllers,但它不起作用:屏幕保持黑色。

1 个答案:

答案 0 :(得分:-1)

当涉及UINavigationController时,在UINavigationController上创建一个类别并覆盖supportedInterfaceOrientations。

 #import "UINavigationController+Orientation.h"

 @implementation UINavigationController (Orientation)

-(NSUInteger)supportedInterfaceOrientations
 {
return [self.topViewController supportedInterfaceOrientations];
 }

-(BOOL)shouldAutorotate
{
return YES;
}

@end  

现在,iOS容器(例如UINavigationController)不会咨询他们的孩子以确定他们是否应该自动旋转。

如何创建类别

  1. 添加一个新文件(cocoa touch下的Objective c-类别)

  2. 类别:UINavigationController上的方向

  3. 将上述代码添加到UINavigationController + Orientation.m