19

给定一个在 Mac OS X 10.7 及更高版本上运行的 Cocoa 应用程序:

在运行时检查您的应用程序当前是否在连接了至少一个视网膜显示器的 Mac 上运行的最佳方法是什么?

如果检查这类事情真的是错误的,我完全欢迎对原因进行合理的解释(如果这些答案很好,我会投票赞成)。

但我仍然想知道:)。

您似乎可以专门针对新的 Mac Book Pro“Retina”硬件(目前唯一具有视网膜显示屏的 Mac)进行检查,但我真的更喜欢更通用/通用/面向未来的检查方式比这个。

理想情况下,我想知道如何检测视网膜显示器,而不是目前恰好配备视网膜显示器的特定 Mac 型号。

4

3 回答 3

33

如果您确实需要这样做,请查看-[NSScreen backingScaleFactor]. 但是,这似乎是错误的,至少在不知道更多关于你为什么想知道的情况下。

虽然目前只有一台配备 Retina 显示器的 Mac,但最终可能会有支持 Retina 的独立显示器(并且可以在运行时连接/分离),并且您也许能够在 1x 模式下配置内置 Retina 显示器。因此,“是否连接了 Retina 显示器”这个问题的答案可以随时改变。

相反,您可能想知道您的内容是否应该使用-convert*ToBacking:或 方法以给定的比例绘制-[NSWindow backingScaleFactor]。如需更多详细信息,请观看 WWDC 2012 会议视频“OS X 上高分辨率的高级技巧和窍门”(发布后,希望在接下来的几周内发布)。

于 2012-06-16T21:25:22.277 回答
9

我刚刚遇到一个实例,我需要检测是否有任何屏幕是高分辨率的,这行得通

float displayScale = 1;
    if ([[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) {
        NSArray *screens = [NSScreen screens];
        NSUInteger screenCount = screens.count
        for (int i = 0; i < screenCount; i++) {
            float s = [screens[i] backingScaleFactor];
            if (s > displayScale)
                displayScale = s;
        }
    }
于 2012-10-31T20:43:23.007 回答
5

好吧,在 iOS 上,您使用该UIScreen.scale属性。如果它返回2.0,那么您使用的是具有高分辨率显示屏的设备。否则,您使用的是低分辨率设备。

所以我想在 Mac OS 上你可以使用-[NSScreen backingScaleFactor]-[NSWindow backingScaleFactor].

于 2012-06-16T21:21:16.277 回答