ios - iOS 上的实际风景 OpenGL View

标签 ios opengl-es screen landscape

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

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

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

最佳答案

确保您的 OpenGL UIView 附加到 UIViewController 而不是直接插入到 UIWindow 中。为此,创建一个自定义 View Controller :

@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

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

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

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

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

关于ios - iOS 上的实际风景 OpenGL View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7539369/

相关文章:

iOS 8 键盘扩展 : How to copy/paste an audio or video clip into messages?

ios - XMPPFramework - 创建 vCard

iphone - 解释 OpenGL ES 背景图像的工作原理

android - 亮度屏幕过滤器

ios - 制作专为 4 英寸显示器设计的 iPhone 应用程序,兼容 3.5 英寸显示器

c++ - 鼠标点击坐标的索引是从0开始还是从1开始?

ios - UISegmentedControl 和 UIPanGestureRecognizer?

iOS/自动布局/ Storyboard : Pin view not responsive for table header

java - 使用 Java 或 C# 在 Y 轴上进行 Open GL 翻译

ios - iOS 上 OpenGL ES 3.0 中 texture3D 的插值