我想创建一个iOS应用程序,该应用程序使用OpenType的字体功能,这些字体在AAT字体中没有等效字体。具体来说,我想使用" ssty" OpenType-Math字体的功能。这是一种替换功能,可以通过稍微大胆的变体替换字形,这些变体在子/上标和分数中看起来更好,并且要以更小的尺寸渲染。理想情况下,我不想使用任何第三方库,例如harfbuzz,只要它可以仅使用CoreText执行此操作。
我尝试了以下代码
CTFontRef font = ...; // this is the font I already set up without the ssty feature
// ...
NSArray *ssty_setting = @[ @"ssty", @1 ];
NSDictionary *font_attributes = @{ (__bridge NSString *)kCTFontFeatureSettingsAttribute : @[ssty_setting ] };
CTFontDescriptorRef font_feature_descriptor = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)font_attributes);
CTFontRef font_with_features = CTFontCreateCopyWithAttributes(font, 0.0, NULL, font_feature_descriptor);
但是当我使用新的font_with_features来检索我想渲染的字形索引时(使用CTLineRef
),我仍然可以找回未替换的字形代码,因此看起来这种方法并不起作用。
" ssty" -feature的另一个问题是它只适用于OpenType-Script with tag" math"使用默认的OpenType语言。但是我没有看到CoreText中有任何改变OpenType脚本的可能性。我很想被证明是错的。
除此之外认为它应该有效,因为在CTFontDescriptor.h标题中(虽然不在文档中)Apple说:
Starting with OS X 10.10 and iOS 8.0, settings are also accepted (but not returned)
in the following simplified forms:
An OpenType setting can be either an array pair of tag string and value
number, or a tag string on its own. For example: @[ @"c2sc", @1 ] or
simply @"c2sc". An unspecified value enables the feature and a value of
zero disables it.
好像他们不接受任意字符串标签......
我希望有一种方法可以使用CoreText,我非常感谢您的帮助,谢谢。