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?)
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 typeUIKit.framework use instead CoreText CTFont and GSFont...GSFont comes from... the GraphicsServices private frameworkGraphicsServices... 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
UIKitandCoreGraphicsframeworks, via the obscurGraphicsServicesone.
iOS > iOS (Private) > Mac OSX :
Why they did this, I would say
CoreGraphics, which comes from Mac OSX, wasn't optimal for iOS devices, andUIKitbeing 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With