Почему UIFont и CGFont / CTFont полностью разделены? - PullRequest
14 голосов
/ 27 апреля 2011

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

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

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

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

1 Ответ

18 голосов
/ 27 апреля 2011

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

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

  • UIKit.framework вообще не использует CGFont type
  • UIKit.framework используйте вместо CoreText CTFont и GSFont ...
  • GSFont исходит от ... GraphicsServices частного фреймворка
  • GraphicsServices ... use CGFont

Так вот мойугадай (может быть совершенно не прав) :

  • UIFont> GSFont (Приватный) > CGFont
  • UIKit> GraphicsServices> CoreGraphics:

    По крайней мере, что касается шрифтов, инженеры Apple создали слой абстракции между UIKit и CoreGraphics средами через obscur GraphicsServices один.

  • iOS> iOS (Приватный) > Mac OSX:

    Почему они это сделали, я бы сказал, CoreGraphics, который поставляется с Mac OSX, не был оптимальным для устройств iOS, и UIKit, будучи только iOS, они добавили слойтвин оба apis.Или, в целом, они планируют однажды полностью отделить UIKit от CoreGraphics ... iOS от Mac OSX ... Кто знает! Яблоко люди делают , мой короткий ответ:)

Об использовании пользовательских шрифтов с UIKit, вам может быть интересно прочитать this .

...