FE_*_*ech 5 typography uifont ios swift
在我的应用程序中,我想stylistic alternate font 用于 'a' 而不是system font.
附件screenshot解释了字体的不同呈现。
我怎样才能启用这种行为UILabel,UITextView以便它呈现正确的一层'a'?
我确实找到了一个YouTube video 链接,它完全解释了这一点,但他正在使用 acustom font并且它是硬编码的。我只想使用system font但与这个替代字符。
我也许可以硬编码UILabel与custom character,我不知道,因为我想用System font。我不想使用custom Font. 什么UITextView是编辑?我们如何让它a在用户输入时使用替代?
Rob*_*ier 10
这是一种称为“替代文体集”的字体功能,您可以使用 CoreText 对其进行配置。请记住,并非所有字体都有此选项,但系统字体有。但是,您需要弄清楚您想要哪种替代方案。
首先,创建您感兴趣的字体:
import CoreText
import UIKit
let baseFont = UIFont.systemFont(ofSize: 72)
Run Code Online (Sandbox Code Playgroud)
然后打印出它的特征:
print(CTFontCopyFeatures(baseFont)!)
Run Code Online (Sandbox Code Playgroud)
找到关于替代文体集的部分,特别是你想要的集,“一层楼:”
{
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";
},
...
Run Code Online (Sandbox Code Playgroud)
重要的数字是选择器 (CTFeatureSelectorIdentifier),14。有了它,您可以创建一个新的字体描述符和新字体:
let descriptor = CTFontDescriptorCreateCopyWithFeature(
baseFont.fontDescriptor,
kStylisticAlternativesType as CFNumber,
14 as CFNumber)
Run Code Online (Sandbox Code Playgroud)
或者,如果更方便,您可以直接在 UIKit 中执行此操作:
let settings: [UIFontDescriptor.FeatureKey: Int] = [
.featureIdentifier: kStylisticAlternativesType,
.typeIdentifier: 14
]
let descriptor = baseFont.fontDescriptor.addingAttributes([.featureSettings: [settings]])
Run Code Online (Sandbox Code Playgroud)
(请注意有点令人惊讶的事实,.featureIdentifier即“CTFeature类型标识符”和.typeIdentifier“CTFeature选择器标识符”。)
然后你可以创建一个新字体(零大小意味着保持大小不变):
let font = UIFont(descriptor: descriptor, size: 0)
Run Code Online (Sandbox Code Playgroud)
您可以在任何接受 UIFont 的地方使用它。
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |