cocoa - 10.9 替换 [NSFont systemFontOfSize : weight:]

标签 cocoa nsfont

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

我可以通过 [[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 为“正常”。目前尚不清楚如何将该比例映射到“轻量级”。我想您可以通过名称查询您获取的一些轻量字体,看看它们的粗细是多少。

关于cocoa - 10.9 替换 [NSFont systemFontOfSize : weight:],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32646380/

相关文章:

cocoa - 如何创建自定义模式 NSWindow?

objective-c - NSFont - 如何获得正确的字体?

cocoa - 在Cocoa文本绘图中的字符之间插入规则空格

ios - 停止 AUGraph 的卡顿

objective-c - 什么在调用 CFStringCreateFromExternalRepresentation?

ios - CocoaPods - 红色框架?

cocoa - NSTextField 吃 NSFontPanel..?

nsstring - 来自 NSFont 的名称和大小

cocoa - 尝试调整 NSImage 的大小,使其变成 NSData