将项目的 BaseSDK 更改为 10.6 后,我注意到我的自定义绘制文本看起来有所不同(查看图像:相同的绘图代码)

在 10.5 BaseSDK 下:图片1

在 10.6 BaseSDK 下:图片2

我正在使用 [(NSString *)myString drawInRect:myRect withAttributes:myAttributes] 进行绘图。

myAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys: [NSColor myColor], NSForegroundColorAttributeName, [NSFont systemFontOfSize:18], NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, shadow, NSShadowAttributeName, nil];

造成这种差异的原因是什么,或者如何减小字体的粗细?我尝试通过以下方式减少厚度

[NSFontManager convertWeight:NO ofFont:font]

但看起来也好不了多少……

提前致谢。

有帮助吗?

解决方案 2

现在我知道它发生的原因和解决这个问题的修复: 似乎添加了10.6的Font LCD平滑选项,它在首选项中启用 - >外观 - >“在可用时使用LCD字体平滑”作为复选框,默认情况下。 这就是为什么改变项目的BaseSDK到10.6后,应用程序中的文本变得液晶平滑,看起来很糟糕。 因此,代码中的问题的修复是在图形之前更改图形上下文中的平滑选项:

CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);
.

此方法的文档告诉我们,此参数是图形状态的一部分,因此如果您不想在其他字体图纸中更改此选项,则应恢复图形状态。

感谢@nsgod找到这个问题的原因。

其他提示

如果我们缩小并仔细观察两个图像,我们会注意到立即区别(至少我):

上部图像中的文本正在使用CRT样式的字体平滑,而较低图像中的文本使用中型LCD样式平滑。 (所有3个样式的LCD字体平滑将在抗锯齿像素中引入彩色投射)。

我们需要更多关于您的测试设置的信息,以便能够说出它会发生这种情况。在OS X的哪个版本下您正在测试它吗?例如,您的应用程序是否与10.6 SDK为10.5的部署目标为10.5,在OS X 10.5.x(在同一台机器上)进行测试时,拍摄上部图像,并且在测试下的10.6.x下进行较低的图像。 ?或者,在Mac OS X 10.6.x中完成所有测试,并且对10.5 SDK构建导致上部图像,并且对10.6 SDK构建导致较低的图像?您使用的是什么型号Mac?如果有的话,您已经挂钩了哪种外部LCD或CRT显示器?

只是几个想法,没有上面的信息要求。我认为默认字体平滑样式为10.5中的CRT,10.6默认为“自动”。因此,如果您有一个带有LCD显示器的系统并在10.5下测试,但从未从默认CRT样式中更改字体平滑样式,然后您将获得像上面的图像。如果您然后在同一系统上切换到10.6,则可以自动检测到10.6自动字体平滑,并使用介质LCD风格的字体平滑,从而导致较低图像中的“重视”文本。 。

要记住的另一件事是字体平滑值以逐个主机存储。例如,在我的机器上,AppleFontSmoothing值存储在〜/ library / preferences / byhost / .globalpreferences中。##########。Plist,其中#########是您的硬件UUID。我认为可以有2个不同的主机设置可以存在2个不同的值。

你得到了你所要求的

[NSFont systemFontOfSize:18]

它们很可能是 10.5 和 10.6 之间略有不同的字体。一位平面设计师因为某种原因而发疯了。

如果您记录以下输出,您会得到什么 [NSFont systemFontOfSize:18]. 。10.5和10.6有区别吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top