2010-02-06 31 views

回答

6

Tell the NSImage instance for the icon that it should be a template image.状态项应该自动绘制正确的方式。

我的原始答案如下。它描述了如何手动完成该效果。在豹和后来,你不需要做任何 - 只是告诉图像是一个模板图像,它应该只是工作。


在菜单附加功能中,这是在运行时应用的效果。我认为这是它的菜单额外的事情;在状态项目中,当然,取决于应用程序。

菜单多余的图标,不包括键盘布局图标,纯黑色。 (看看菜单额外的内容来看看这个)。额外的菜单和/或SystemUIServer(在你的案例中,你的应用)会对此应用一个渐变:顶部大约-10%的不透明度,到底部。

对于您的应用,在Opacity的运行时间之前,这将很容易做到。在图层的主要内容中,用纯黑填充您的形状;在图层的蒙版中,绘制一个填充渐变的矩形,占据画布的整个16乘16点的大小。对蒙版模式使用白色或黑色;只要将渐变色设置为匹配即可:对于白色模式,将渐变设置为纯黑色,不透明度为90%至88%;对于黑色模式,将其设置为纯白色,不透明度为90%至88%。

您也可以在运行时使用混合模式来执行此操作。首先绘制纯黑色,90%至88%的不透明度渐变,然后使用目标模式绘制形状(纯黑色,100%不透明度)。

+0

如果我在这里理解了这个问题,运行时效果在[10.5 AppKit版本说明中的“文本和图像效果”] [1]中进行了描述。 [1]:http://developer.apple.com/mac/library/releasenotes/cocoa/AppKitOlderNotes.html#TextAndImageEffects – Ken 2010-02-17 11:15:38

+0

D'oh!描述效果的部分告诉读者当你将图像作为模板图像时会发生什么。这就是提问者应该做的事情,这是所有提问者应该做的。感谢您指出这一点;我已经相应地修改了我的答案。 – 2010-02-17 11:46:55

+0

非常感谢! 对于那些有兴趣的人,这里有更多的信息: '为了将图像标记为模板,请调用 - [NSImage setTemplate:]。为方便起见,在10.5或之后的应用程序中,通过名称以@“Template”结尾的 - [NSImage imageNamed:]从磁盘读取的任何图像将在创建时标记为模板。这使得在Interface Builder中使用模板图像变得很容易。只要确保您的图片文件名以“模板”结尾。 – 2010-02-18 05:15:54

相关问题