这是一种名为“替代风格集”的字体特性,您可以使用CoreText进行配置。请记住,并非所有字体都具有此选项,但系统字体具有此选项。然而,您需要确定您想要哪个替代集。
首先,创建您感兴趣的字体:
import CoreText
import UIKit
let baseFont = UIFont.systemFont(ofSize: 72)
然后打印出其特征:
print(CTFontCopyFeatures(baseFont)!)
找到“替代风格集”部分,特别是您想要的集合,“一层a:”
{
CTFeatureTypeIdentifier = 35;
CTFeatureTypeName = "Alternative Stylistic Sets";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = "Straight-sided six and nine";
},
{
CTFeatureSelectorIdentifier = 4;
CTFeatureSelectorName = "Open four";
},
{
CTFeatureSelectorIdentifier = 6;
CTFeatureSelectorName = "Vertically centered colon";
},
{
CTFeatureSelectorIdentifier = 10;
CTFeatureSelectorName = "Vertically compact forms";
},
{
CTFeatureSelectorIdentifier = 12;
CTFeatureSelectorName = "High legibility";
},
{
CTFeatureSelectorIdentifier = 14;
CTFeatureSelectorName = "One storey a";
},
...
重要的数字是选择器(CTFeatureSelectorIdentifier),即14。有了这个数字,您就可以创建一个新的字体描述符和新字体:
但您需要确保已经正确设置了其他必需的参数,并且您有适当的字体资源。
let descriptor = CTFontDescriptorCreateCopyWithFeature(
baseFont.fontDescriptor,
kStylisticAlternativesType as CFNumber,
14 as CFNumber)
如果更方便的话,您也可以直接在UIKit中进行此操作:
let settings: [UIFontDescriptor.FeatureKey: Int] = [
.featureIdentifier: kStylisticAlternativesType,
.typeIdentifier: 14
]
let descriptor = baseFont.fontDescriptor.addingAttributes([.featureSettings: [settings]])
请注意.featureIdentifier
实际上是"CTFeatureTypeIdentifier",而.typeIdentifier
则是"CTFeatureSelectorIdentifier"。
然后,您可以创建一个新的字体(零大小表示保留相同的大小):
let font = UIFont(descriptor: descriptor, size: 0)
您可以在任何接受 UIFont 的地方使用它。