Почему UIFont и CGFont/CTFont полностью разделены?


Я пытался нарисовать какой-то текст скачанным шрифтом. Я посмотрел документацию по API и поискал в Интернете. Я нашел решение, но проблема в том, что оно применимо только к структуре уровня CoreGraphics. Поэтому я искал способ преобразовать CGFont в UIFont, но не было никакого способа сделать это.

Я понял, что UIFont и CGFont/CTFont полностью разделены, хотя они созданы из одного и того же файла шрифтов. CGFont и CTFont преобразуются друг в друга, но для UIFont единственным способом является воссоздание с его атрибутами, такими как имя и размер. И применимые коды также разделены.

Например, CATextLayer принимает только CGFont/CTFont - нет UIFont. Но все элементы управления UIKit принимают только UIFont.

Почему существует такое разделение? Или я ошибаюсь? (Как можно использовать загруженный шрифт в классах UIKit?)
1 14

1 ответ:

Короткий ответ: "только Apple знает"

Более подробный ответ, после копания (перевернув) рамки немного:

  • UIKit.framework не использует вообще CGFont Тип
  • UIKit.framework вместо этого используйте CoreText CTFont и 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, вам может быть интересно прочитать это.