gpt4 book ai didi

swift - NSFontDescriptor.withSymbolicTraits 更改我的字体名称

转载 作者:行者123 更新时间:2023-11-28 05:59:44 29 4
gpt4 key购买 nike

enter image description here

正如你在图片中所看到的,字体的名称一开始是“Helvetica”,我调用font.fontDescriptor.withSymbolicTraits:创建一个字体描述符,然后创建一个新的字体描述符。但新字体的名称变为 Arial-ItalicMT。它是如何发生的?谢谢。

最佳答案

TL; DR:添加 withFamily() 会得到预期的结果:

let font = NSFont(name: "Helvetica", size: 18)!

let descriptor = font.fontDescriptor.withFamily(font.familyName!).withSymbolicTraits(.italic)
let newFont = NSFont(descriptor: descriptor, size: 18)!

print(font.fontName) // Helvetica
print(newFont.fontName) // Helvetica-Oblique

长答案:

NSFontDescriptor 就像字体的过滤条件。根据您配置此对象的方式,系统将找到匹配的字体。让我们检查一下您的第一个字体的描述符:

let font = NSFont(name: "Helvetica", size: 18)!
print(font.fontDescriptor)
/*
NSCTFontDescriptor <0x1016168d0> = {
NSFontNameAttribute = Helvetica;
NSFontSizeAttribute = 18;
}
*/

名称为 Helvetica 且大小为 18 的字体。到目前为止还不错。现在,让我们检查您的第二个描述符:

let descriptor = font.fontDescriptor.withSymbolicTraits(.italic)
print(descriptor)
/*
NSCTFontDescriptor <0x10161b0e0> = {
NSCTFontTraitsAttribute = {
NSCTFontSymbolicTrait = 1;
};
NSFontSizeAttribute = 18;
}
*/

没有任何地方提到 Helvetica!如果您使用此描述符初始化 NSFont,操作系统将在您的计算机上找到第一个可用的斜体字体,即 Arial-ItalicMT。您可以打开字体簿查看。

您需要指定您正在寻找 Helvetica 系列中的斜体字体:

let descriptor = font.fontDescriptor.withSymbolicTraits(.italic).withFamily("Helvetica")
print(descriptor)
/*
NSCTFontDescriptor <0x10113baa0> = {
NSCTFontTraitsAttribute = {
NSCTFontSymbolicTrait = 1;
};
NSFontFamilyAttribute = Helvetica;
NSFontSizeAttribute = 18;
}
*/

let newFont = NSFont(descriptor: descriptor, size: 18)! // Helvetica-Oblique

为了使其更通用,您可以将字符串 "Helvetica" 替换为第一个 font 对象的 familyName

关于swift - NSFontDescriptor.withSymbolicTraits 更改我的字体名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50199749/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com