I got the following snippet to test font features:
let font = UIFont(name: "MyFont", size: 18)
let features: NSArray = CTFontCopyFeatures(font!)!
print("properties = \(features)")
Use the features using an extension:
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
}
}
Issue
Above has worked well with every font except this one particular font that list following:
OpenType TrueType
Opentype Features:
- StyleSets
- Fractions
- Zero
- Tabular
- Sup/sub
- Disc. ligatures
However this is what I get when above snippet is run:
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;
}
);
}
)
As you can see, most above listed features are missing.
How would check/use for above listed Opentype features?