将BaseSDK从10.5更改为10.6后,字体粗细问题

时间:2011-05-12 12:17:08

标签: objective-c cocoa text drawing base-sdk

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

在10.5 BaseSDK下: image1

在10.6 BaseSDK下: image2

我用[(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]

但看起来好不了多少......

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果我们放大并仔细观察两张图片,我们会注意到一个直接的差异(至少我是这样):

enter image description here

上图中的文字使用CRT样式字体平滑,而下图中的文字使用中等LCD样式字体平滑。 (LCD字体平滑的所有3种样式都会在消除锯齿的像素中引入色偏。)

我们需要有关您的测试设置的更多信息才能说明为什么会这样。在什么版本的OS X下你用它来测试?例如,您的应用是针对10.6 SDK构建的,部署目标为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显示屏,并使用中型LCD风格的字体平滑,这将导致下方图像中的“看起来更重”的文本

要记住的另一件事是字体平滑值存储在逐个主机的基础上。例如,在我的机器上,AppleFontSmoothing值存储在〜/ Library / Preferences / ByHost / .GlobalPreferences。##########。plist中,其中####### ###是您的硬件UUID。我想有可能为不同的主机设置存储2个不同的值。

答案 1 :(得分:1)

现在我知道它发生的原因以及此问题的解决方法: 似乎在10.6中添加了字体LCD平滑选项,即在首选项中启用 - >外观 - > “可用时使用LCD字体平滑”作为复选框,默认选中。

这就是为什么在将项目的BaseSDK更改为10.6之后,应用程序中的文本变得平滑,看起来很糟糕。

因此,代码中问题的解决方法是在我们的绘图之前更改图形上下文中的平滑选项:

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

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

感谢@NSGod查找此问题的原因。

答案 2 :(得分:0)

你得到了你要求的东西

[NSFont systemFontOfSize:18]

它们很可能是10.5到10.6之间略有不同的字体。无论出于何种原因,平面设计师都疯了。

如果您记录[NSFont systemFontOfSize:18]的输出,您会得到什么? 10.5和10.6之间有什么不同?