ios - rect = [[UIScreen mainScreen] bounds]; 的正确返回值(IOS)

标签 ios iphone xcode ipad opengl-es

谁能告诉我什么功能

rect = [[UIScreen mainScreen] bounds];

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

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

最佳答案

正如 rmaddy 评论的那样,UIKit 总是以点为单位报告屏幕和 View 的尺寸——一个 UI 布局的单位,其尺寸在设备之间(大致)是恒定的——而不是像素。 (他也说得对,除非你添加了 4 英寸、4.7 英寸和 5.5 英寸屏幕的启动图像资源,否则你只会看到 3.5 英寸的 iPhone 尺寸。)

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

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

关于ios - rect = [[UIScreen mainScreen] bounds]; 的正确返回值(IOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26703890/

相关文章:

ios - 更新 UI 时在异步调用中保留循环

ios - 为什么 UITextField.text 是可选的?

iphone - cocos2d中如何添加画圆的动画效果

ios - 为 IOS 9.3 和 10.0 构建应用程序

ios - 无效的 IPA : missing embedded provisioning profile. 你确定这是临时的吗?

ios - 在后台将位置发送到服务器 - ios 7

iphone - 实时图像处理 (OCR)

android - 混合与本地移动应用

iphone - 如何从 iphone 应用程序启动外部应用程序 (NDrive)

ios - 尝试存档项目时 Xcode 出错 : Unexpected duplicate tasks