2012-11-07 129 views
3

我想在我的Mac应用程序中获取标签上的内阴影。NSTextField内阴影

我想匹配我的设计师发送的Photoshop设计。 我想匹配的表情是: Photoshop Design

这在Photoshop正在做的方法是使用以下设置设置内阴影: Photoshop Settings

我见过几个不同的解决方案,对于这种类型的在其他网站上的东西,但没有一个是正确的。

例如大家说,使用:

[[myNSTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 

我发现很多东西有关在NSBezierPath做一个内阴影或相似但不带有标签。

这个问题的答案说,使用上述setBackgroundStyle再到

说你的渐变背景则例如可以通过使用自定义视图与NSGradient

但是,在到达这个观点去了吗? 答案参考的链接再次讨论了在窗口上做内部阴影,而不是文本。

任何人都可以帮我解决这个问题吗?

谢谢

回答

4

这个效果在Photoshop中很容易制作。不幸的是,在Cocoa应用程序中,它并不那么简单。 我不知道用标准控件做一个简单的方法,但我会告诉你如何处理这个问题。

问题是,阴影必须由对象和下落。换句话说,阴影总是模态的,不能仅仅绘制出没有实际物体的阴影。在核心图形中,阴影是绘图上下文的一个属性。当我们渲染一个对象时,我们可以将阴影效果添加到进程中。

现在,当我们知道真正的问题,解决的办法是小菜一碟:)的

比方说,这里是你的文本生成的图像。您可以在互联网上找到如何将文本呈现到位图上下文的示例。

enter image description here

你只需要:

倒转。

enter image description here

与阴影渲染它下降到的图像(位图上下文)。

enter image description here

通过排除反转图像掩模图像。

enter image description here

渲染的背景纹理你有结果图像。

enter image description here

我会做一个的NSView子类,并绘制层上所有这些东西。您可以找到如何创建自己的位图上下文并绘制它的示例。这里是如何使用面具https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html

我希望这有助于。