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

时间:2013-08-21 16:24:13

标签: objective-c cocoa retina-display nsimage

我的应用程序菜单附加图标应该向用户反映有意义的信息。但是,预先绘制图标的情况太多了。在程序上以编程方式准备图标会更容易。 什么是获得NSImage尺寸(以点或像素为单位)并在视网膜和非视网膜显示器上有完美外观的最佳方法?

1 个答案:

答案 0 :(得分:2)

在AppKit中,点的视图大小可通过frame检索。从10.7开始,每个屏幕还有一个backingScaleFactor。通过将帧的大小乘以屏幕的后备比例因子,可以找到视图因此出现在给定屏幕上的像素大小。

E.g。在一台只有一个屏幕的计算机上,您可以这样做:

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