ios - 在 UIViewController 中仅旋转一个 UIView(两个中的一个)

标签 ios uiview uiviewcontroller opengl-es-2.0

我有一个包含两个 View 的 GLKViewController:一个 GLKView 和一个显示一些命令的透明 UIView

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

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

  • 不旋转 GLKView;
  • 使用命令旋转覆盖的 UIView。

基本上 GLKView 应该始终保持纵向,而另一个 View 应该遵循设备方向。

GLKViewController 在 NavigationController 中。要么我需要让 NavigationController 横向旋转,要么我需要实现一个假的导航栏并以编程方式执行“弹出”。

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

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

最佳答案

当涉及到 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

关于ios - 在 UIViewController 中仅旋转一个 UIView(两个中的一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077505/

相关文章:

ios - 将 subview 添加到容器 View 共享的父 View 会调整容器 View 的大小

objective-c - UIView 大小和 UIWindow rootViewController

objective-c - setNeedsDisplay 在一个大的 UIView 上导致

ios - 在 iOS 中出现键盘时启用滚动内容

ios - 在 Xcode 4.6 中使用 UIScrollView

ios - Facebook iOS SDK native 登录不起作用

ios - 如何使用 Swift 2.0 声明递归枚举

ios - 自动生成的 CoreML 类使用了冲突的初始值设定项

ios - 限制选项卡栏 View Controller 中的旋转

ios - UITableViewController 中的静态单元格未在模拟器中显示内容