1

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

+ (NSFont *)fontWithName:(NSString *)fontName

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

由于某些设计限制,我们需要在普通的旧 C/C++ 中执行检查,即这些天使用CoreText

但是,似乎不存在与以下类似的等效 CoreText API 调用fontWithName:

  • CTFontCreateWithName 总是返回一个字体,因为它使用了后备策略
  • CTFontCopyFullName似乎使用的名称与NSFont.. 接受/使用的名称不同?

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

4

1 回答 1

0

似乎CTFontCopyPostScriptName()总是会为 - 理解的任何字符串返回有效结果,[NSFont fontWithName:]反之亦然。

至少在我跨 10.8 - 10.10 的实验中,并使用有效和虚构的字体名称,结果CTFontCopyPostScriptName()总是可以用来验证字体名称是否适用于NSFont.

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

于 2015-04-01T06:15:41.213 回答