为什么UIFont和CGFont/CTFont完全分开?
我试图用下载的字体绘制一些文本。我查看了 API 文档并在网上进行了搜索。我找到了一个解决方案,但问题是它仅适用于 CoreGraphics 级别的框架。所以我寻找一种将CGFont
转换为UIFont
的方法,但没有办法做到这一点。
我意识到 UIFont 和 CGFont/CTFont 是完全分开的,即使它们是从同一个字体文件创建的。 CGFont
和 CTFont
可以相互转换,但对于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短的答案:“只有苹果公司的人知道”
在深入挖掘(逆向)框架之后,更详细的答案是:
UIKit.framework
不'根本不使用CGFont
类型UIKit.framework
使用 CoreTextCTFont
和 < code>GSFont...GSFont
来自...GraphicsServices
私有框架GraphicsServices
...使用CGFont
所以这是我的猜测(可能完全错误):
UIFont
>GSFont
(私人) >CGFont
UIKit
>GraphicsServices
> >CoreGraphics
:<块引用>
至少在字体方面,Apple 工程师在
UIKit
之间设置了一个抽象层和
CoreGraphics
框架,通过 obscurGraphicsServices
一个。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 allCGFont
typeUIKit.framework
use instead CoreTextCTFont
andGSFont
...GSFont
comes from... theGraphicsServices
private frameworkGraphicsServices
... useCGFont
So here is my guess (Might be completely wrong) :
UIFont
>GSFont
(Private) >CGFont
UIKit
>GraphicsServices
>CoreGraphics
:iOS
>iOS
(Private) >Mac OSX
:About using custom fonts with
UIKit
, you might be interested reading this.