CoreText相当于[NSFont fontWithName]

时间:2015-03-31 05:52:37

标签: objective-c cocoa core-text appkit nsfont

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

实例化字体
+ (NSFont *)fontWithName:(NSString *)fontName

现在,在加载或导入文件时,我们想检查字体名称是否会在当前系统上实际解析。

由于某些设计限制,我们需要使用普通的旧C / C ++进行检查,即使用 CoreText 进行检查。

但是,似乎没有与fontWithName:类似的等效CoreText API调用:

  • CTFontCreateWithName 始终返回字体,因为它使用后备策略
  • CTFontCopyFullName似乎使用的名称与NSFont接受/使用的名称不同。?

基本上问题是:
我们如何使用CoreText功能检查当前系统中是否存在字体,并且稍后可以使用[NSFont fontWithName:]成功实例化字体。?

1 个答案:

答案 0 :(得分:0)

似乎CTFontCopyPostScriptName()将始终为[NSFont fontWithName:]所理解的任何字符串返回有效结果 - 反之亦然。

至少在10.8 - 10.10的实验中,使用有效和虚构的字体名称,CTFontCopyPostScriptName()的结果始终可用于验证字体名称对NSFont是否有效。

编辑#1
一些实验表明,为了安全起见,添加CTFontCopyFamilyName()的后备是一个好主意。