5

例如,我说的是焦点标题栏或 safari 的书签栏上文本的凹槽样式。使用时是否有一种简单的方法来重现这种风格:

[string drawAtPoint:... withAttributes:...];
4

2 回答 2

7

如果你想让它看起来很完美,你需要绘制两次文本。

正如您在任何应用程序中放大工具栏项目下方的标签时所看到的那样,或者例如 Safari 中的书签栏(Control+scroll up,control+option+\ 以切换放大图像的平滑度),文本呈现为 sub - 像素抗锯齿,至少在“外观”系统首选项中的“字体平滑样式:”设置为中等时,在具有内置或外部 Apple 平板显示器的 Mac 上默认设置为中等。

NSShadow 不能与子像素抗锯齿一起使用,因此如果您只是在属性字典中设置一个 NSShadowAttributeName 来绘制字符串,当您放大渲染时,您会注意到子像素抗锯齿是 MIA文本。由于 NSShadow 的设计方式,无论您将 NSShadow 实例设置为哪种颜色(即使它是不透明的),它都将始终使用 Alpha 通道进行绘制,从而无法实现亚像素抗锯齿。

解决方案真的很简单:

  1. 用具有一定透明度的白色绘制一次文本,
  2. 然后在上面再画一次,在你喜欢的灰色阴影中高一个像素,没有透明度。

您的“阴影”将在没有亚像素抗锯齿的情况下绘制,但它顶部的实际文本将使用它绘制,为您提供与标准 Cocoa 工具栏按钮项目标签或 Safari 书签栏中的项目完全相同的效果。

编辑:似乎 Safari 的书签栏项目也以亚像素精度绘制它们的“阴影”,所以他们这样做的方式可能是为白色“阴影”文本选择不透明的灰色阴影;该方法的缺点:您将绘图代码绑定为仅适用于特定背景颜色,例如,如果您的元素将用于蓝色背景,您需要将该颜色设置为浅蓝色,以显示就像它是半透明的白色。

于 2009-02-01T10:43:02.687 回答
3

在它下面画一个非阴影。使用白色阴影,不透明度 50% 左右,模糊 0,向下偏移 1 磅。

一个简单的方法是简单地绘制文本两次。第一次,您将其绘制为低 1 pt,白色,不透明度为 50%。第二次,您将其绘制在所需的位置,以所需的颜色,以所需的(可能是 100%)不透明度。

于 2009-02-01T07:48:14.583 回答