为什么UIFont和CGFont/CTFont完全分开?

Eon*_*nil 14 uikit uifont ios

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

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

例如,CATextLayer只接受CGFont/ CTFont- 否UIFont.但是所有UIKit控件都只接受UIFont.

为什么存在这种分离?还是我错了?(在UIKit课程中使用下载字体的任何方式?)

Vin*_*rci 18

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

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

  • UIKit.framework不使用所有 CGFont类型
  • UIKit.framework改用CoreText CTFontGSFont...
  • GSFont来自...... GraphicsServices私人框架
  • GraphicsServices... 使用 CGFont

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

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

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

  • iOS> iOS (私人) > Mac OSX:

    我想说CoreGraphics,为什么他们这样做,来自Mac OSX,对于iOS设备来说不是最佳的,而且UIKit只是iOS,他们在两个apis之间添加了一层.或者更一般地,他们计划有一天将UIKit与CoreGraphics完全分开......来自Mac OSX的iOS ......谁知道!苹果人呢,我的简答:)

关于使用自定义字体有UIKit,你可能有兴趣阅读.