14

我试图用下载的字体绘制一些文本。我查看了 API 文档并搜索了 Web。我找到了一个解决方案,但问题是它只适用于CoreGraphics关卡框架。所以我搜索了一种转换为 的方法CGFontUIFont但没有办法做到这一点。

我意识到UIFont并且CGFont/CTFont完全分开了,即使它们是从同一个字体文件创建的。CGFont并且CTFont可以相互转换,但是对于UIFont,唯一的方法是使用其名称和大小等属性重新创建。并且适用的代码也分开了。

例如,CATextLayer只接受CGFont/ CTFont— no UIFont。但所有UIKit控件只接受UIFont

为什么会存在这种分离?还是我错了?UIKit(有什么方法可以在课堂上使用下载的字体吗?)

4

1 回答 1

18

简短的回答:“只有苹果人知道”

在稍微挖掘(反转)框架之后,更详细的答案:

  • UIKit.framework根本 不使用CGFont类型
  • UIKit.framework改用 CoreTextCTFontGSFont...
  • GSFont来自...GraphicsServices私有框架
  • GraphicsServices... 采用CGFont

所以这是我的猜测(可能完全错误)

  • UIFont> GSFont(私人) >CGFont
  • UIKit> GraphicsServices> CoreGraphics:

    至少在字体方面,Apple 工程师已经在UIKitCoreGraphics框架之间建立了一个抽象层,通过模糊层GraphicsServices

  • iOS> iOS (私人) > Mac OSX

    为什么他们这样做,我会说CoreGraphics,它来自 Mac OSX,对于 iOS 设备来说并不是最佳的,而且UIKit仅仅是 iOS,他们在两个 api 之间添加了一个层。或者更普遍地说,他们计划有一天将 UIKit 与 CoreGraphics 完全分开……iOS 与 Mac OSX……谁知道呢!苹果人确实如此,我的简短回答:)

关于使用自定义字体UIKit,您可能有兴趣阅读内容。

于 2011-04-27T10:06:22.230 回答