视网膜/非视网膜:绘制图标



我的应用程序的菜单额外图标应该向用户反映有意义的信息。然而,有太多的情况需要事先绘制图标。以程序化的方式随时准备图标会更容易。获得NSImage的大小(以点或像素为单位)并在视网膜和非视网膜显示器上获得完美外观的最佳方法是什么?

在AppKit中,可以通过frame检索以点为单位的视图大小。从10.7开始,每个屏幕都增加了一个backingScaleFactor。因此,视图在给定屏幕上显示的像素大小可以通过将帧的大小乘以屏幕的背景比例因子来找到。

例如,在一台只有一个屏幕的电脑上,你可以做:

CGFloat backingScaleFactor = [[NSScreen mainScreen] backingScaleFactor];
NSSize pixelSize =
    NSSizeMake(
         view.frame.size.width * backingScaleFactor,
         view.frame.size.height * backingScaleFactor);

所以我想一个答案是取[NSScreen screens]中任何事物的最大比例因子。

编辑:。。。但更好的答案是使用视图的convertSizeToBacking:——例如

pixelSize = [view convertSizeToBacking:view.frame.size];

最新更新