4

我想实现一种[NSFont systemFontOfSize:13 weight:NSFontWeightLight]适用于 Mac OS 10.9 和 10.10 的替换方法。

我可以通过[[NSFont systemFontOfSize:13] fontDescriptor].

但是,我不知道如何更改字体描述符的权重并从中创建 NSFont。

正如WWDC 2015, #804 : 30:17 中所解释的,我们不应该从系统字体中获取姓氏(如此此处所建议的那样)。

是否可以更改字体描述符权重并从中获取新的 NSFont ?

4

2 回答 2

2

我可以想到两种方法,但都没有给出与+[NSFont systemFontOfSize:weight:].

一是使用-[NSFontManager convertWeight:ofFont:]。这只允许您增加或减少体重,而不是选择特定的目标体重。但是,如果它提供了一种新字体,您可以查询-[NSFontManager weightOfFont:]以获取它的权重,其中 3 的值是“轻”(参见表-convertWeight:ofFont:)。通过重复该过程,您可能能够获得所需的重量,尽管该方法可能会失败或超调。

另一种是从字体到字体描述符到具有所需权重的新字体描述符到新字体:

NSFontDescriptor* origDescriptor = origFont.fontDescriptor;
NSFontDescriptor* newDescriptor = [origDescriptor fontDescriptorByAddingAttributes:@{ NSFontTraitsAttribute: @{ NSFontWeightTrait: @(-0.2) } }];
NSFont* newFont = [NSFont fontWithDescriptor:newDescriptor size:origFont.pointSize];

这里我只是随意选择了-0.2。这种方法的问题在于它将权重作为从 -1.0 到 1.0 的值,而 0 是“正常”。目前尚不清楚如何将该比例映射到“轻量级”。我想您可以通过名称查询您获得的一些轻量字体,以查看它们的权重是多少。

于 2015-09-18T08:12:54.773 回答
0

这可能不是答案,只是对 OS X 10.10提示。 [NSFont systemFontOfSize: weight:]可以在 OS X 10.10 下使用并且工作正常。不过,我还没有在 10.9 下尝试过。我不确定我在哪里听到的,但我认为这种方法向后兼容旧版本。

我向 WWDC 的一位 AppKit 工程师询问了这个问题,他对我的应用程序在 10.10 下使用新 API 工作感到惊讶。但是,他不建议我在 10.10 等系统上使用 API,因为它可能会在后台使用私有 API,从而阻止应用程序被 MAS 接受。

于 2015-09-18T17:04:06.053 回答