在我们的应用程序中,我们将自定义对象的字体存储为包含字体名称(从字体面板中检索到)的字符串,并使用

+ (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()后面添加回退,以确保安全。

10-06 09:56