我试图将CTFont转换为UIFont而不会丢失任何样式和属性,例如:
我使用以下代码片段来获取字体功能:
let font = UIFont.systemFont(ofSize: 16)
let features: NSArray = CTFontCopyFeatures(font)!
print("properties = \(features)")
Run Code Online (Sandbox Code Playgroud)
所以如果我看到这个:
{
CTFeatureTypeExclusive = 1;
CTFeatureTypeIdentifier = 22;
CTFeatureTypeName = "Text Spacing";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 7;
CTFeatureSelectorName = "No Change";
},
{
CTFeatureSelectorIdentifier = 8;
CTFeatureSelectorName = "No Kerning";
}
);
Run Code Online (Sandbox Code Playgroud)
我可以将其翻译成 Swift:
let fontDescriptorFeatureSettings = [
[ UIFontDescriptor.FeatureKey.featureIdentifier : 22,
UIFontDescriptor.FeatureKey.typeIdentifier : 8], ]
Run Code Online (Sandbox Code Playgroud)
这成功地为我禁用了字距调整。
在同一个片段中,我看到:
{
CTFeatureOpenTypeTag = cv05;
CTFeatureSampleText = I;
CTFeatureTooltipText = "\U00a9 2015-2022 Apple Inc. …Run Code Online (Sandbox Code Playgroud) 我有一个包含字体样式和sumbolic特征的CTFont.
我想创建一个新样式的新字体,它继承了第一个字体的符号特征.我怎样才能做到这一点?
CTFontRef newFontWithoutTraits = CTFontCreateWithName((CFString)newFontName, CTFontGetSize(font), NULL);
CTFontRef newFont = CTFontCreateCopyWithSymbolicTraits(newFontWithoutTraits, CTFontGetSize(font), NULL, 0, CTFontGetSymbolicTraits(font));
Run Code Online (Sandbox Code Playgroud)
新字体在这里为null我不知道应该传递给4th参数CTFontCreateCopyWithSymbolicTraits.
创建CTFont时,我收到以下警告.
CoreText性能注释:客户端请求"ArialRoundedMTBold"使用名称的PostScript名称字体"Arial Rounded MT Bold".
// Creating Font
CTFontRef fontWithoutTrait = CTFontCreateWithName((__bridge CFStringRef)(name), size, NULL);
// Font names I use to create a font
[UIFont familyNames];
Run Code Online (Sandbox Code Playgroud)
如果我删除从[UIFont familyNames]获取的任何字体名称中的所有空格,它是否是核心文本的预期字体名称是否安全?