Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何获取AppKit/Core文本以获得最接近的匹配特征集,而不是在不完全匹配时丢弃整个特征列表?_Macos_Cocoa_Core Text - Fatal编程技术网

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及以上为目标

谢谢