在iOS上的实际横向OpenGL视图

use*_*252 4 landscape screen opengl-es ios

我正在将基于C++的引擎从Android移植到iOS,我对iOS设备上的横向模式如何工作有一些疑问.

我可以在横向模式下成功启动我的设备,但无论我如何旋转(或强制旋转),我的帧缓冲都会保持纵向模式.例如,我希望960x640分辨率而不是默认的320x480分辨率.

我一直在研究它,我看到有些人这样做但是使用OpenGL明确地旋转场景,这意味着实际的轴不是横向模式,对我来说这是一个丑陋的解决方法.

Joh*_*hen 5

确保您的OpenGL UIView附加到UIViewController,而不是直接插入UIWindow.为此,请创建自定义视图控制器:

@interface MyViewController : UIViewController
@end

@implementation MyViewController
- (void)loadView {
    // Create your EAGL view
    MyEAGLView *eaglView = [[MyEAGLView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    self.view = eaglView;
    [eaglView release];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)

然后通过AppDelegate将其添加到您应用的窗口:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    MyViewController *viewController = [[MyViewController alloc] init];
    [self.window setRootViewController:viewController];
    [viewController release];
    [self.window makeKeyAndVisible];
}    
Run Code Online (Sandbox Code Playgroud)

self.window只是应用程序的UIWindow,如果您将窗口存储在其他位置,则可能需要更改它.

之后,UIViewController会在设备转动时处理旋转并调整视图大小,您可以覆盖MyEAGLView对象中的layoutSubviews方法来处理调整OpenGL上下文的大小.您可能还想查看Apple的OpenGL应用程序示例代码,因为它正确处理了这些内容.

  • 我应该提一下,检查你的应用程序的info.plist并确保在"支持的设备方向"部分中启用了所有方向. (2认同)