为什么UIFont和CGFont / CTFont完全分离?
我试图用一个下载的字体画一些文字。 我查看了API文档并search了网页。 我find了一个解决scheme,但问题是,它只适用于CoreGraphics
级框架。 所以我search了一种将CGFont
转换成CGFont
的方式,但是没有办法做到这一点。
我意识到UIFont
和CGFont/CTFont
完全分离,即使它们是从相同的字体文件创build的。 CGFont
和CTFont
可以相互转换,但是对于UIFont
,唯一的方法就是重新创build名称和大小等属性。 而适用的代码也是分开的。
例如, CATextLayer
只接受CGFont
/ CTFont
– 没有UIFont
。 但是所有UIKit
控件只接受UIFont
。
为什么这种分离存在? 还是我错了? (在UIKit
类中使用下载的字体的任何方式?)
简短的回答: “只有苹果的人知道”
在挖掘(反转)框架之后,更详细的答案是:
-
UIKit.framework
完全不使用CGFont
types -
UIKit.framework
使用,而不是CoreTextCTFont
和GSFont
… -
GSFont
来自…GraphicsServices
私人框架 -
GraphicsServices
…使用CGFont
所以这里是我的猜测(可能是完全错误的) :
-
UIFont
>GSFont
(私人) >CGFont
-
UIKit
>GraphicsServices
>CoreGraphics
:至less就字体而言,苹果工程师通过隐藏的
GraphicsServices
之一,在UIKit
和CoreGraphics
框架之间build立了一个抽象层。 -
iOS
>iOS
(专用) >Mac OSX
:为什么他们这样做,我想说来自Mac OSX的
CoreGraphics
对于iOS设备来说并不是最优的,而UIKit
只是iOS,他们在两个apis之间增加了一层。 或者更一般地说,他们计划有一天从CoreGraphics完全分离UIKit …从Mac OSX的iOS …谁知道! 苹果伙计们 ,我简短的回答:)
关于使用UIKit
自定义字体,你可能有兴趣阅读这个 。