我想实现一个在MacOS10.9和10.10上工作的[NSFont systemFontOfSize:13 weight:NSFontWeightLight]的替换方法。
我可以通过[[NSFont systemFontOfSize:13] fontDescriptor]获取字体描述符。
但是,我不知道如何更改字体描述符权重并从它创建一个NSFont。
正如WWDC 2015, #804:30:17中所解释的,我们不应该从系统字体(如建议的here和here)中获取家族名称。
是否可以更改字体描述符权重并从中获取新的NSFont?
发布于 2015-09-18 16:12:55
我可以想到两种方法,但这两种方法都没有给出与+[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-19 01:04:06
这可能不是答案,只是对OSX10.10的一个提示。[NSFont systemFontOfSize: weight:]可以在OSX10.10下使用,并且工作正常。不过我还没有在10.9版本下尝试过。我不确定我是从哪里听说的,但我认为这种方法与旧版本是向后兼容的。
我向WWDC的一位AppKit工程师询问了这一点,他很惊讶我的应用程序能在10.10版本下使用新的应用程序接口。然而,他不建议我在10.10这样的旧系统上使用API,因为它可能会在后台使用私有API,从而阻止应用程序被MAS接受。
https://stackoverflow.com/questions/32646380
复制相似问题