带分段控件的NSToolbarItem - 图像无法正确渲染

时间:2017-08-21 08:41:53

标签: macos cocoa retina-display high-resolution nstoolbaritem

我试图模仿Xcode的工具栏控件来显示/隐藏导航器和检查器:

This Guy

...但没有底部窗格(仅左侧和右侧:两段)

我从Xcode的UI中截取了图标,并在图像编辑应用程序中跟踪它们。左窗格的资源是:

@ 1X:

Icon Left @1x

(20x20 @ 72 dpi)

@ 2倍:

Icon Left @2x

(40x40 @ 72 dpi,虽然使用20x20 @ 144 dpi似乎没有区别)

右窗格对应部分相同,但水平翻转。

所有资源都存储在资产目录中,如下所示:

enter image description here

我在工具栏上删除了一个分段控件,用于在其中创建一个带有分段控件的工具栏项,并为每个段设置图像属性(0和1)。

两个片段的图像缩放设置为"按比例缩小"。段控制具有段宽度"固定"检查,两个段的宽度为48。工具栏项目的最小尺寸为(83 x 25),最大尺寸为(100 x 28)。

图标在故事板(Interface Builder)上正确显示。

但是,当我运行该应用时,我无法正确显示图标图像。

  • 如果我在视网膜监视器上启动我的应用程序,则任何一个部分都不会显示任何图标。
  • 如果我将窗口移动到外部非视网膜监视器,则会显示两个图标。
  • 如果我从thew目录中删除其中一个图像集并运行该应用程序,则正确显示另一个图标!(在任一监视器上)
  • 如果我进一步为两个片段设置相同的剩余图像,它们会正确显示!
  • 如果我在项目中保留两个图像集,但将其中一个片段中的图像字段重置为空,则另一个图标不会显示!

地球上发生了什么?

我已经放了sample project on GitHub来重现这个问题。

编辑:为了确保,我使用cartool命令行实用程序从已编译的应用程序二进制文件中提取资源(如this answer中所述),并且所有4个图像都以正确的大小... < / p>

解决方案:正如下面的Ivan's answer所示,我转而使用矢量图形(PDF)作为图标。我下载了Acorn的试用版,并以1x大小重新创建了我的图标,然后以PDF格式导出。

为了避免在运行时缩小@2x的大小,我必须确保编辑器中的所有坐标都是整数,并且还要选中&#34; Snap to pixels&#34;在每个形状图层的“矢量形状”检查器中:

Acorn UI

(快乐结局)

$ git commit -m "Fix toolbar icons for good (PDF)"

1 个答案:

答案 0 :(得分:1)

根据我的经验,在工具栏中使用位图很麻烦。您可以尝试针对确切建议的解决方案,以避免出现一些问题:https://developer.apple.com/macos/human-interface-guidelines/icons-and-images/custom-icons/

然而,最干净的方法是使用矢量(pdf)图标,因为它们只是按预期工作。