I was trying to draw some text with开发者_JAVA百科 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?)
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
:At least Concerning fonts, Apple engineers have set up an abstraction layer between
UIKit
andCoreGraphics
frameworks, via the obscurGraphicsServices
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, andUIKit
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.
精彩评论