为啥 [[UIScale mainScreen] scale] 1 在带有 Xcode 4.2 的 iPad 3 上?

Posted

技术标签:

【中文标题】为啥 [[UIScale mainScreen] scale] 1 在带有 Xcode 4.2 的 iPad 3 上?【英文标题】:Why is [[UIScale mainScreen] scale] 1 on an iPad 3 with Xcode 4.2?为什么 [[UIScale mainScreen] scale] 1 在带有 Xcode 4.2 的 iPad 3 上? 【发布时间】:2012-06-20 09:56:13 【问题描述】:

在我的 iPad 3 上进行测试时,

[[UIScreen mainScreen] scale] == 1.0

我的理解是这应该是2.0。

我在 Snow Leopard 上使用带有 Xcode 4.2 的 ios 5.1 SDK,据我了解,这不是“官方支持”的配置。但是,我无法想象为什么这会影响纯粹在设备上发生的事情。 (我可以想象它会以各种方式破坏模拟器。)

【问题讨论】:

您正在创建一个通用/仅限 iPad 的应用程序吗? 好的,如果只有 iPhone,我可能会看到一个可能的问题。 您如何进行比较,让您认为它返回 1.0?另外,您是否连接了另一个屏幕(通过外部适配器/AirPlay)? @NickForge:我正在使用 cocos2d,它使用if ([[UIScreen mainScreen] scale] == 1.0) 提前退出其视网膜支持设置。我已经使用调试器来验证,是的,scale 正在返回 1.0,这就是代码被跳过的原因。我没有使用外部屏幕。 屏幕边界应始终为 768x1024(这就是使用“点”而不是像素的意义,而是使用比例因子)。你说'to(o?) early-out'......即使在初始化很久之后它仍然产生 scale == 1.0 吗? 【参考方案1】:

在 XCode 4.3 版之前,[UIScreen scale] 将为 iPad 3 返回 1.0。更新到 4.3 将允许返回正确的 2.0 值。

【讨论】:

【参考方案2】:

那是因为屏幕没有缩放。 你可以得到这样的比率:

[[CCDirector sharedDirector] winSize].width/[[CCDirector sharedDirector] winSizeInPixels].width

如果这等于 1,那么您使用的是非视网膜设备。否则,如果 2 ,在视网膜显示器上。 另外,不要忘记启用视网膜支持。

问候,

乔治

【讨论】:

"另外,不要忘记启用视网膜支持。"整个问题是 cocos2d 启用视网膜支持,它没有启用它,因为它使用屏幕比例检查视网膜显示。 @Noah Witherspoon - 阅读上面的 cmets - 提出问题的用户说他使用 cocos2D。

以上是关于为啥 [[UIScale mainScreen] scale] 1 在带有 Xcode 4.2 的 iPad 3 上?的主要内容,如果未能解决你的问题,请参考以下文章

MainScreen + Persistable 在一个 BlackBerry 类中

([[UIScreen mainScreen] scale] == 2.0) & ([[UIScreen mainScreen] bounds].size.height == 568.0) 不

尽管 Superview 的位置,但将 UIView 居中在 MainScreen 的中心

UIScreen.mainScreen().nativeBounds.height 无法使用 Xcode 7/Swift 2,目标 iOS7

横向模式的“UIScreen mainScreen] applicationFrame]”

在调用 willRotateToInterfaceOrientation 时,iOS 7 与 iOS 8 上的 mainScreen 边界大小不同