Почему UIFont и CGFont/CTFont полностью разделены?
Я пытался нарисовать какой-то текст скачанным шрифтом. Я посмотрел документацию по API и поискал в Интернете. Я нашел решение, но проблема в том, что оно применимо только к структуре уровня CoreGraphics
. Поэтому я искал способ преобразовать CGFont
в UIFont
, но не было никакого способа сделать это.
Я понял, что UIFont
и CGFont/CTFont
полностью разделены, хотя они созданы из одного и того же файла шрифтов. CGFont
и CTFont
преобразуются друг в друга, но для UIFont
единственным способом является воссоздание с его атрибутами, такими как имя и размер. И применимые коды также разделены.
Например, CATextLayer
принимает только CGFont
/CTFont
- нет UIFont
. Но все элементы управления UIKit
принимают только UIFont
.
UIKit
?)1 ответ:
Короткий ответ: "только Apple знает"
Более подробный ответ, после копания (перевернув) рамки немного:
UIKit.framework
не использует вообщеCGFont
ТипUIKit.framework
вместо этого используйте CoreTextCTFont
иGSFont
...GSFont
происходит от... частная структураGraphicsServices
GraphicsServices
... использоватьCGFont
Итак, вот мое предположение (может быть, совершенно неверное) :
UIFont
>GSFont
(частный) >CGFont
UIKit
>GraphicsServices
>CoreGraphics
:По крайней мере, Что касается шрифтов, инженеры Apple создали слой абстракции между
UIKit
иCoreGraphics
фреймворки, через обскурGraphicsServices
один.
iOS
>iOS
(частный) >Mac OSX
:Почему они это сделали, я бы сказал
CoreGraphics
, который исходит от Mac OSX, не был оптимальным для устройств iOS, иUIKit
будучи только iOS, они добавили слой между обоими API. Или в более общем плане они планируют в один прекрасный день полностью отделить UIKit от CoreGraphics... iOS от Mac OSX... Кто знает! яблочный народ делает , мой короткий ответ :)Об использовании пользовательских шрифтов с
UIKit
, вам может быть интересно прочитать это.