Macos 如何获取AppKit/Core文本以获得最接近的匹配特征集,而不是在不完全匹配时丢弃整个特征列表?
给出以下示例程序:Macos 如何获取AppKit/Core文本以获得最接近的匹配特征集,而不是在不完全匹配时丢弃整个特征列表?,macos,cocoa,core-text,Macos,Cocoa,Core Text,给出以下示例程序: import Cocoa let traits: [String: AnyObject] = [ NSFontSymbolicTrait: (NSFontBoldTrait | NSFontItalicTrait),// | NSFontCondensedTrait), NSFontWeightTrait: NSFontWeightBold, // NSFontWidthTrait: 1.0, ] let descattr: [String: A
import Cocoa
let traits: [String: AnyObject] = [
NSFontSymbolicTrait: (NSFontBoldTrait | NSFontItalicTrait),// | NSFontCondensedTrait),
NSFontWeightTrait: NSFontWeightBold,
// NSFontWidthTrait: 1.0,
]
let descattr: [String: AnyObject] = [
NSFontFamilyAttribute: "Gill Sans",
NSFontSizeAttribute: 13,
NSFontTraitsAttribute: traits,
]
var desc = NSFontDescriptor(fontAttributes: descattr)
//desc = desc.matchingFontDescriptorWithMandatoryKeys([NSFontFamilyAttribute, NSFontTraitsAttribute])!
let font = NSFont(descriptor: desc, size: 13)
print("\(font?.fontDescriptor)")
照原样,这张照片
Optional(NSCTFontDescriptor <0x7feb49535580> = {
NSFontNameAttribute = "GillSans-BoldItalic";
NSFontSizeAttribute = 13;
})
可选(nsctfont描述符={
NSFontNameAttribute=“GillSans BoldItalic”;
NSFontSizeAttribute=13;
})
因此它匹配粗体标志和我指定的权重值
然而,如果我加上浓缩的特征,那么粗体和斜体特征就会停止注册,我只会得到普通的老Gill Sans
如果我将权重指定为nsfontwowerblack
而不是0(nsfontwowerregular
)、nsfontwowersemibold
或nsfontwowerbold
,则相同
或者换句话说,如果没有精确匹配,AppKit和Core Text(我用Core Text独立验证了这一点)都可以忽略traits字典
如何使它不忽略traits字典,而是返回一个与字典中指定trait最匹配的字体?例如,如果我通过了nsfontwowitblack
,我应该得到nsfontwowitultrabold
的字体,因为这是最匹配的字体
还是我必须自己实现这样一个匹配器?(我不介意这样做,事实上我已经这样做了,而且效果很好;我只是想知道我是否首先遗漏了什么。)
这是OSX10.11,但我需要以OSX10.7及以上为目标
谢谢