iOS:Swift 中的 Opentype 字体功能

Giz*_*odo 5 xcode fonts opentype ios swift

我得到了以下代码段来测试字体功能:

let font = UIFont(name: "MyFont", size: 18)
let features: NSArray = CTFontCopyFeatures(font!)!
print("properties = \(features)")
Run Code Online (Sandbox Code Playgroud)

使用扩展来使用功能:

    extension UIFont {

        func propotionalNumbers() -> UIFont {

            let originalFontDescriptor = self.fontDescriptor

            let fontDescriptorFeatureSettings = [
                [ UIFontFeatureTypeIdentifierKey: 1,
                  UIFontFeatureSelectorIdentifierKey: 0],
                [ UIFontFeatureTypeIdentifierKey: 16,
                  UIFontFeatureSelectorIdentifierKey: 4]
            ]

            let fontDescriptorAttributes = [UIFontDescriptorFeatureSettingsAttribute: fontDescriptorFeatureSettings]
            let fontDescriptor = originalFontDescriptor.addingAttributes(fontDescriptorAttributes)
            let font = UIFont(descriptor: fontDescriptor, size: 0)

            return font
        }
}
Run Code Online (Sandbox Code Playgroud)

问题

除了下面列出的一种特定字体外,上面的每种字体都运行良好:

OpenType TrueType

开放式特点:

  • 样式集
  • 分数
  • 表格
  • 升/降
  • 光盘。连字

但是,这是运行上述代码段时得到的结果:

properties = (
        {
        CTFeatureTypeIdentifier = 0;
        CTFeatureTypeName = "All Typographic Features";
        CTFeatureTypeNameID = 256;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorDefault = 1;
                CTFeatureSelectorIdentifier = 0;
                CTFeatureSelectorName = "All Type Features";
                CTFeatureSelectorNameID = 260;
            }
        );
    },
        {
        CTFeatureTypeIdentifier = 1;
        CTFeatureTypeName = Ligatures;
        CTFeatureTypeNameID = 257;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorIdentifier = 4;
                CTFeatureSelectorName = "Rare Ligatures";
                CTFeatureSelectorNameID = 261;
            }
        );
    },
        {
        CTFeatureTypeExclusive = 1;
        CTFeatureTypeIdentifier = 6;
        CTFeatureTypeName = "Number Spacing";
        CTFeatureTypeNameID = 258;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorDefault = 1;
                CTFeatureSelectorIdentifier = 0;
                CTFeatureSelectorName = "Monospaced Numbers";
                CTFeatureSelectorNameID = 262;
            }
        );
    },
        {
        CTFeatureTypeExclusive = 1;
        CTFeatureTypeIdentifier = 10;
        CTFeatureTypeName = "Vertical Position";
        CTFeatureTypeNameID = 259;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorDefault = 1;
                CTFeatureSelectorIdentifier = 0;
                CTFeatureSelectorName = "Normal Vertical Position";
                CTFeatureSelectorNameID = 263;
            },
                        {
                CTFeatureSelectorIdentifier = 1;
                CTFeatureSelectorName = Superiors;
                CTFeatureSelectorNameID = 264;
            },
                        {
                CTFeatureSelectorIdentifier = 2;
                CTFeatureSelectorName = Inferiors;
                CTFeatureSelectorNameID = 265;
            }
        );
    }
)
Run Code Online (Sandbox Code Playgroud)

如您所见,上面列出的大多数功能都缺失了。

如何检查/使用上面列出的 Opentype 功能?