首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >10.9替换[NSFont systemFontOfSize: weight:]

10.9替换[NSFont systemFontOfSize: weight:]
EN

Stack Overflow用户
提问于 2015-09-18 15:35:02
回答 2查看 1.6K关注 0票数 4

我想实现一个在MacOS10.9和10.10上工作的[NSFont systemFontOfSize:13 weight:NSFontWeightLight]的替换方法。

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

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

正如WWDC 2015, #804:30:17中所解释的,我们不应该从系统字体(如建议的herehere)中获取家族名称。

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

EN

回答 2

Stack Overflow用户

发布于 2015-09-18 16:12:55

我可以想到两种方法,但这两种方法都没有给出与+[NSFont systemFontOfSize:weight:]完全相同的语义。

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

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

代码语言:javascript
复制
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表示“正常”。目前还不清楚如何将这种比例映射到“轻量级”。我想你可以通过名称来查询一些轻量级字体,看看它们的粗细是多少。

票数 2
EN

Stack Overflow用户

发布于 2015-09-19 01:04:06

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

我向WWDC的一位AppKit工程师询问了这一点,他很惊讶我的应用程序能在10.10版本下使用新的应用程序接口。然而,他不建议我在10.10这样的旧系统上使用API,因为它可能会在后台使用私有API,从而阻止应用程序被MAS接受。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32646380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档