Opengl es OpenGL ES 1+;iOS 8=层边界混乱?
由于我安装了Xcode 6.0.1,我的OpenGL ES 1层在任何模拟设备(以及真实硬件:带iOS 8的iPhone 4S)上都显示不正确——层的大小和位置都不正确 更改Opengl es OpenGL ES 1+;iOS 8=层边界混乱?,opengl-es,ios8,xcode6,layer,bounds,Opengl Es,Ios8,Xcode6,Layer,Bounds,由于我安装了Xcode 6.0.1,我的OpenGL ES 1层在任何模拟设备(以及真实硬件:带iOS 8的iPhone 4S)上都显示不正确——层的大小和位置都不正确 更改glViewport参数没有任何区别。我可以把它评论出来,它看起来也一样 部分解决方案: 我已经选中并取消选中了“使用自动布局”框,以便Xcode将我的窗口更新到新的版本要求。现在iPhone4S上的一切看起来都很好,但其他设备上的窗口大小仍然很混乱 有人将OpenGL ES 1代码更新到新设备上了吗?我注意到,[[UISc
glViewport
参数没有任何区别。我可以把它评论出来,它看起来也一样
部分解决方案:
我已经选中并取消选中了“使用自动布局”框,以便Xcode将我的窗口更新到新的版本要求。现在iPhone4S上的一切看起来都很好,但其他设备上的窗口大小仍然很混乱
有人将OpenGL ES 1代码更新到新设备上了吗?我注意到,
[[UIScreen mainScreen]边界]这一事实,成功地正确显示了渲染缓冲区。大小取决于iOS 8,并以编程方式对视图进行编码。因此,我的代表如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) {
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
screenHeight = screenSize.height;
screenWidth = screenSize.width;
window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
window.bounds = CGRectMake(0, 0, screenWidth, screenHeight);
MainViewController = [[UIViewController alloc] init];
glView = [[EAGLView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
glView.bounds = CGRectMake(0, 0, screenWidth, screenHeight);
MainViewController.view = glView;
window.rootViewController = MainViewController;
[window makeKeyAndVisible];
[glView setupGame];
[glView startAnimation];
return YES;
}
CGRect screenBounds = [[UIScreen mainScreen] bounds];
float scale = [UIScreen mainScreen].scale;
float width = screenBounds.size.width;
float height = screenBounds.size.height;
NSLog(@"scale: %f, width: %f, height: %f", scale, width, height);
float w = width > height ? width : height;
if (scale == 2.0f && w == 568.0f) { ...
我的OpenGL ES 1应用程序也有类似的问题。
以下代码始终在纵向模式下返回renderbuffer大小(shouldAutorotate为否,因此在我的应用程序中禁用autorotate):
但是现在(Xcode 6.0.1,iOS8)这个大小取决于设备的方向。所以我得到了错误的渲染缓冲大小
“使用自动布局”勾选+取消勾选对我没有帮助。一个可能的解决方法是获取尺寸(宽度和高度),并根据哪个尺寸更大来决定实际宽度,如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) {
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
screenHeight = screenSize.height;
screenWidth = screenSize.width;
window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
window.bounds = CGRectMake(0, 0, screenWidth, screenHeight);
MainViewController = [[UIViewController alloc] init];
glView = [[EAGLView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
glView.bounds = CGRectMake(0, 0, screenWidth, screenHeight);
MainViewController.view = glView;
window.rootViewController = MainViewController;
[window makeKeyAndVisible];
[glView setupGame];
[glView startAnimation];
return YES;
}
CGRect screenBounds = [[UIScreen mainScreen] bounds];
float scale = [UIScreen mainScreen].scale;
float width = screenBounds.size.width;
float height = screenBounds.size.height;
NSLog(@"scale: %f, width: %f, height: %f", scale, width, height);
float w = width > height ? width : height;
if (scale == 2.0f && w == 568.0f) { ...
我使用相同的代码。在我的情况下,iPhone 4和5在两个方向上看起来都不错,但在6和6加上,如果我以横向模式启动我的应用程序,它会变得一团糟(要报告一个bug吗?)。也许可以尝试在纵向启动你的应用程序,并在加载时输入代码以在需要时旋转它?我只在iPad Mini Retina上进行了测试。刚刚向苹果发送了一个请求。现在等待官方的答复。。。