10.9替换[NSFont systemFontOfSize:weight:]

时间:2015-09-18 07:35:02

标签: cocoa nsfont

我想为适用于Mac OS 10.9和10.10的C-c M-c <or> M-x cider-connect ;; enter figwheel host, port, in this case -- localhost, 7888 ;; then, in appeared REPL buffer: user> (use 'figwheel-sidecar.repl-api) user> (cljs-repl) cljs.user=> 实现替换方法。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

一个是使用-[NSFontManager convertWeight:ofFont:]。这只会让你的体重上升或下降,而不是选择特定的目标体重。但是,如果它提供了一种新字体,您可以查询-[NSFontManager weightOfFont:]以获得其权重,其中值为3&#34; light&#34; (见-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表示&#34;正常&#34;。目前还不清楚如何将该比例映射到轻量级&#34;。我想你可以通过名字查询你获得的一些轻量级字体,看看它们的重量是多少。

答案 1 :(得分:0)

这可能不是 的答案,只是OS X 10.10的提示。 var method = new MethodInvoker(delegate { //your code }); if (InvokeRequired) { Invoke(method); } else { method(); } 可以在OS X 10.10下使用,并且运行正常。我没有在10.9下试过这个。我不知道在哪里听到这个,但我认为这种方法与旧版本向后兼容。

我向WWDC的AppKit工程师询问了这个问题,他很惊讶我的应用程序使用新API在10.10下运行。但是,他不建议我在旧的系统(如10.10)上使用API​​,因为它可能会在后台使用私有API,阻止应用程序被MAS接受。