我想为[NSFont systemFontOfSize:13 weight:NSFontWeightLight]
实现一个在Mac OS 10.9和10.10上工作的替代方法。
我可以通过[[NSFont systemFontOfSize:13] fontDescriptor]
获得字体描述符。
然而,我不知道如何改变字体描述符的权重,并从它创建一个NSFont。
正如WWDC 2015, #804: 30:17所解释的,我们不应该从系统字体中取姓氏(如这里和这里所建议的)。
是否可以改变字体描述符的权重并从中获得新的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为"正常"值。目前尚不清楚如何将这一比例映射为"轻量级"。我想你可以查询一些轻字体的名称,看看他们的重量是多少。
这可能不是答案,只是OS X 10.10的一个提示。[NSFont systemFontOfSize: weight:]
可以在OS X 10.10下使用并且工作良好。我没有在10.9下尝试过。我不确定我是从哪里听说的,但我认为这个方法是向后兼容旧版本的。