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