【问题标题】:Why are UIFont and CGFont/CTFont separated completely?为什么 UIFont 和 CGFont/CTFont 完全分开?
【发布时间】:2011-08-13 12:52:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios uikit uifont


    【解决方案1】:

    简短的回答:“只有 Apple 人才知道”

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

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

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

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

      至少在字体方面,苹果工程师在UIKit之间设置了一个抽象层 和 CoreGraphics 框架,通过模糊的 GraphicsServices 一个。

    • iOS > iOS (私人) > Mac OSX

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 2014-11-20
      • 2014-08-18
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多