可可 – 10.9替代[NSFont systemFontOfSize:weight:]

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

我可以通过[[NSFont systemFontOfSize:13] fontDescriptor]获取字体描述符.

但是,我无法弄清楚如何更改字体描述符权重并从中创建NSFont.

WWDC 2015, #804:30:17所述,我们不应该从系统字体中取出姓氏(如建议的herehere).

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

最佳答案 我可以想到两种方法,但它们都没有给出与[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表示“正常”.目前尚不清楚如何将该比例映射到“轻量级”.我想你可以查询你通过名字获得的一些轻量级字体,看看它们的重量是多少.

点赞