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

发布于 2024-11-04 00:19:35 字数 543 浏览 0 评论 0原文

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

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

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

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

I was trying to draw some text with a downloaded font. I looked at API documentation and searched the Web. I found a solution, but the problem is that it's applicable to only the CoreGraphics level framework. So I searched for a way to convert CGFont to UIFont, but there was no way to do this.

I realized UIFont and CGFont/CTFont are separated completely, even though they're created from same font file. CGFont and CTFont are convertible from/to each other, but for UIFont, the only way is recreating with its attributes like name and size. And applicable codes are also separated.

For instance, CATextLayer accepts only CGFont/CTFont — no UIFont. But all UIKit controls accept only UIFont.

Why does this separation exist? Or am I wrong? (Any way to use a downloaded font in UIKit classes?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别闹i 2024-11-11 00:19:35

简短的答案:“只有苹果公司的人知道”

在深入挖掘(逆向)框架之后,更详细的答案是:

  • UIKit.framework不'根本不使用 CGFont 类型
  • UIKit.framework 使用 CoreText CTFont 和 < code>GSFont...
  • GSFont 来自...GraphicsServices 私有框架
  • GraphicsServices...使用 CGFont

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

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

    <块引用>

    至少在字体方面,Apple 工程师在 UIKit 之间设置了一个抽象层
    CoreGraphics 框架,通过 obscur GraphicsServices 一个。

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

    <块引用>

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

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

The short answer : "Only Apple folks knows"

The more detailed answer, after digging (reversing) frameworks a bit:

  • UIKit.framework doesn't use at all CGFont type
  • UIKit.framework use instead CoreText CTFont and GSFont...
  • GSFont comes from... the GraphicsServices private framework
  • GraphicsServices... use CGFont

So here is my guess (Might be completely wrong) :

  • UIFont > GSFont(Private) > CGFont
  • UIKit > GraphicsServices > CoreGraphics :

    At least Concerning fonts, Apple engineers have set up an abstraction layer between UIKit
    and CoreGraphics frameworks, via the obscur GraphicsServices one.

  • iOS > iOS (Private) > Mac OSX :

    Why they did this, I would say CoreGraphics, which comes from Mac OSX, wasn't optimal for iOS devices, and UIKit being iOS only, they added a layer between both apis. Or more generally they plan one day to separate completely UIKit from CoreGraphics... iOS from Mac OSX... Who knows! The apple folks does, my short answer :)

About using custom fonts with UIKit, you might be interested reading this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文