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

时间:2011-04-27 03:52:18

标签: ios uikit uifont

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

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

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

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

1 个答案:

答案 0 :(得分:18)

答案简短:“只有Apple人知道”

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

  • UIKit.framework未使用 CGFont类型
  • UIKit.framework使用CoreText CTFontGSFont ...
  • GSFont来自...... GraphicsServices私人框架
  • GraphicsServices ...使用CGFont

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

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

      

    至少关于字体,Apple工程师在UIKit之间设置了一个抽象层   和CoreGraphics框架,通过阻碍GraphicsServices一个。

  • iOS> iOS (私人)> Mac OSX

      

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

关于在UIKit中使用自定义字体,您可能会对阅读this感兴趣。