Mac OS X:对视网膜显示进行运行时检查的最佳方法?

时间:2012-06-16 21:11:23

标签: objective-c macos cocoa osx-lion retina-display

鉴于在Mac OS X 10.7及更高版本上运行的Cocoa应用程序:

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

如果检查这类事情真的是错误的,我完全欢迎有充分理由解释为什么(如果这些答案很好的话,我会对这些答案进行投票)。

但我仍然想知道:)。

你好像可以专门检查一下新的Mac Book Pro“Retina”硬件(目前唯一拥有视网膜显示器的Mac),但我真的更喜欢更通用/通用/面向未来的检查的方法比这个。

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

3 个答案:

答案 0 :(得分:32)

如果您确实需要这样做,请查看-[NSScreen backingScaleFactor]。但是,这似乎是错误的,至少在不了解你想知道的原因的情况下。

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

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

答案 1 :(得分:8)

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

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;
        }
    }

答案 2 :(得分:5)

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

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