在我们的应用程序中,我们将自定义对象的字体存储为包含字体名称(从字体面板中检索到)的字符串,并使用
+ (NSFont *)fontWithName:(NSString *)fontName
现在,当加载或导入文件时,我们要检查字体名称是否会在当前系统上实际解析。
由于某些设计限制,我们需要在普通的旧C / C ++中执行检查,即最近几天使用CoreText。
但是,似乎不存在与
fontWithName:
类似的等效CoreText API调用:CTFontCreateWithName
始终返回字体,因为它使用后备策略CTFontCopyFullName
似乎使用的名称不同于NSFont
接受/使用的名称。所以基本上问题是:
我们如何使用CoreText功能检查当前系统上是否存在字体,并且以后可以使用
[NSFont fontWithName:]
成功实例化该字体。 最佳答案
对于CTFontCopyPostScriptName()
可以理解的任何字符串,[NSFont fontWithName:]
似乎总是返回有效的结果-反之亦然。
至少在我的10.8-10.10的实验中,使用有效的和虚构的字体名称,CTFontCopyPostScriptName()
的结果始终可以用于验证字体名称对于NSFont
是否有效。
编辑#1
一些实验表明,最好还是在CTFontCopyFamilyName()
后面添加回退,以确保安全。