Почему 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происходит от... частная структураGraphicsServicesGraphicsServices... использовать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, вам может быть интересно прочитать это.