【问题标题】:Correct return values for rect = [[UIScreen mainScreen] bounds]; (IOS)rect = [[UIScreen mainScreen] bounds]; 的正确返回值(IOS)
【发布时间】:2014-11-02 20:16:26
【问题描述】:

谁能告诉我是什么功能

rect = [[UIScreen mainScreen] bounds];

应该返回不同iOS设备的宽度和高度?我确信自从迁移到最新的 xcode 和 ios 8.1 后我得到的值是错误的

对于 ipad air,我得到 1024 x 768,对于 iphone 5s,我得到 480x320,这两者显然都不是 mainScreen 的分辨率。我只有这两个设备和用于在以前的 sdk/xcode 上返回正确分辨率的函数。我的代码在很大程度上依赖于这些正确的值,以便自动定位和缩放 UI、openGL 渲染缓冲区等,现在由于这个函数返回错误的值而被破坏了。

【问题讨论】:

  • 1024x768 是 iPad 的正确尺寸(横向)。 480x320 表示您的 iPhone 处于横向状态,但您似乎没有 4" 启动图像,这就是为什么您得到 480 而不是 568。
  • 我使用的是 2048x1536 的 iPad air,这不应该是 h 和 w 的返回值吗?
  • 没有。所有 iPad 的屏幕尺寸均为 1024x768。这是以点为单位,而不是像素。查看测量值始终以点为单位。如果您想要以像素为单位的屏幕尺寸,请乘以屏幕比例。
  • 感谢您的信息!最后一件事,我如何获得您上面提到的设备的屏幕比例?
  • 查看UIScreen的文档。

标签: ios iphone xcode ipad opengl-es


【解决方案1】:

作为 rmaddy cmets,UIKit 总是以磅为单位报告屏幕和视图的尺寸——这是一种 UI 布局单位,其尺寸(大致)在设备间保持不变——而不是像素。 (他也说对了,除非您为 4 英寸、4.7 英寸和 5.5 英寸屏幕添加了启动图像资源,否则您只会看到 3.5 英寸的 iPhone 尺寸。)

要获得具有显示器原始分辨率的 OpenGL ES 帧缓冲区,请将点大小乘以屏幕的 nativeScale 因子。或者直接获取nativeBounds。但最好只使用GLKView 自动为您完成所有帧缓冲区内容(并且正确完成)。

请注意,nativeScalenativeBounds 是 iOS 8 中的新 UIScreen 属性——这是获得 iPhone 6 Plus 的非整数像素比例而不是 UIKit 用于艺术的 3 倍比例的唯一方法。在以前的 iOS 版本(您不必担心 iPhone 6 Plus)上,您仍然可以使用 scalebounds

【讨论】:

  • 感谢 Rickster,正确的分辨率问题已解决,但 iOS8 出现了一个非常奇怪的异常,我的屏幕向左渲染了 25%...我检查了所有来自边界的值等等,一切似乎都是正确的。我的项目基于旧的 EAGLview 代码,我尝试使用 xib(使用它可以正常工作)并尝试自己生成窗口。我总是得到相同的结果。屏幕向左移动 25%(连同触摸区域)。真是莫名其妙。
  • 如果它有助于我在横向模式下运行我的游戏。
  • 这是一个单独的问题,因此最好将其作为单独的问题发布。
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2011-10-30
  • 1970-01-01
  • 2013-07-02
  • 2013-07-19
  • 2012-09-06
  • 2021-06-20
  • 1970-01-01
相关资源
最近更新 更多