在不降低文本渲染质量的情况下,为Cocoa标签添加阴影(凹陷的文本效果)

14

我希望创建一个类似于Safari或iTunes的文本效果的状态栏,即凹陷的文本。

示例

然而,如果我仅仅在Interface Builder中使用Core Animation面板添加阴影,OS X会出现最差的文本渲染:

我的次像素去哪了

如何在标签上获得凹陷的文本并保持正确的次像素渲染?

2个回答

35

有一种内置的方法可以做到这一点:

[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

我认为不行,这是由系统内部处理的。你需要编写自己的绘图代码来更改它。 - Rob Keniger

6

这是一种廉价的老技巧:您可以在偏移处使用白色绘制文本,然后在其上方绘制黑色文本。

在文本绘制系统中,有一个用于阴影的钩子,即NSAttributedString的NSShadowAttributeName。但经过测试,它似乎也会破坏子像素抗锯齿。


2
有没有更好的解决方案呢?OS X中众多的文本API之一肯定能够正确地完成它...我不想添加另一个标签,因为这将更难维护,并且可能会对Voice Over用户造成麻烦。 - Kornel
1
答案涉及绘制额外的文本,而不一定是添加额外的标签。您可以创建一个带有自定义绘图代码的NSTextField子类。然后,您只需要一个标签。 - Daniel Yankowsky
你不需要做任何这些事情,NSCell会为你处理。请看我的回答。 - Rob Keniger
1
@irsk:说得好。我保留我的代码,因为它适用于任何版本的OS X,而setBackgroundStyle:是在Leopard才引入的。 - Chuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接