我正在谈论焦点标题栏上的文字凹槽样式,或者safari的书签栏.使用时是否有一种简单的方法来重现这种风格:
[string drawAtPoint:... withAttributes:...];
Dirk Stoop.. 7
如果您希望它看起来很完美,则需要两次绘制文本.
正如您在任何应用程序中放大工具栏项目下方的标签时所看到的那样,或者例如Safari中的书签栏(控制+向上滚动,控制+选项+ \以切换放大图像的平滑),文本将以子图形呈现像素消除锯齿,至少当"外观"系统首选项中的"字体平滑样式:"设置为中等时,默认情况下,它将在具有内置或外置Apple平板显示器的Mac上显示.
NSShadow不能与子像素消除锯齿一起使用,所以如果您只是在属性字典中设置一个NSShadowAttributeName,你正在绘制字符串,当你放大渲染时,你会注意到亚像素消除锯齿是MIA文本.由于NSShadow的设计方式,无论您将NSShadow实例设置为什么颜色 - 即使它是不透明的 - 它将始终使用alpha通道绘制,从而无法进行子像素抗锯齿.
解决方案非常简单:
用白色和一些透明度画一次你的文字,
然后在它上面再画一次,一个像你喜欢的灰色阴影更高的像素,没有透明度.
您的"阴影"将在没有子像素抗锯齿的情况下进行绘制,但它顶部的实际文本将使用它绘制,为您提供与标准Cocoa工具栏按钮项标签或Safari书签栏中的项完全相同的效果.
编辑:似乎Safari的书签栏项目也以子像素精度绘制了他们的"阴影",所以他们这样做的方式可能是为白色"阴影"文本选择不透明的灰色阴影; 这种方法的缺点:你将你的绘图代码与特定的背景颜色相关联,例如,如果你的元素将在蓝色背景上使用,你需要将该颜色设置为浅蓝色,以便出现喜欢它是半透明的白色.
如果您希望它看起来很完美,则需要两次绘制文本.
正如您在任何应用程序中放大工具栏项目下方的标签时所看到的那样,或者例如Safari中的书签栏(控制+向上滚动,控制+选项+ \以切换放大图像的平滑),文本将以子图形呈现像素消除锯齿,至少当"外观"系统首选项中的"字体平滑样式:"设置为中等时,默认情况下,它将在具有内置或外置Apple平板显示器的Mac上显示.
NSShadow不能与子像素消除锯齿一起使用,所以如果您只是在属性字典中设置一个NSShadowAttributeName,你正在绘制字符串,当你放大渲染时,你会注意到亚像素消除锯齿是MIA文本.由于NSShadow的设计方式,无论您将NSShadow实例设置为什么颜色 - 即使它是不透明的 - 它将始终使用alpha通道绘制,从而无法进行子像素抗锯齿.
解决方案非常简单:
用白色和一些透明度画一次你的文字,
然后在它上面再画一次,一个像你喜欢的灰色阴影更高的像素,没有透明度.
您的"阴影"将在没有子像素抗锯齿的情况下进行绘制,但它顶部的实际文本将使用它绘制,为您提供与标准Cocoa工具栏按钮项标签或Safari书签栏中的项完全相同的效果.
编辑:似乎Safari的书签栏项目也以子像素精度绘制了他们的"阴影",所以他们这样做的方式可能是为白色"阴影"文本选择不透明的灰色阴影; 这种方法的缺点:你将你的绘图代码与特定的背景颜色相关联,例如,如果你的元素将在蓝色背景上使用,你需要将该颜色设置为浅蓝色,以便出现喜欢它是半透明的白色.