2011-04-27 41 views
14

我試圖用下載的字體繪製一些文本。我查看了API文檔並搜索了網頁。我找到了一個解決方案,但問題是它僅適用於CoreGraphics級別的框架。所以我搜索了一種方法將CGFont轉換爲UIFont,但是沒有辦法做到這一點。爲什麼UIFont和CGFont/CTFont完全分開?

我意識到UIFontCGFont/CTFont完全分開,即使它們是從相同的字體文件創建的。 CGFontCTFont可以互相轉換,但對於UIFont,唯一的方法是使用其名稱和大小等屬性重新創建。並且適用的代碼也是分開的。

例如,CATextLayer只接受CGFont/CTFont - no UIFont。但是所有UIKit控件僅接受UIFont

這個分離爲什麼存在?或者我錯了? (任何方式使用下載的字體在UIKit類?)

回答

17

簡短的回答:「只有蘋果的人都知道」

更詳細的解答,挖(倒車)後框架位:

  • UIKit.framework完全不CGFont類型使用
  • UIKit.framework改用CoreText CTFontGSFont ...
  • GSFont來自......的GraphicsServices私人框架
  • GraphicsServices ......使用CGFont

所以這是我的猜測(可能完全錯)

  • UIFont>GSFont(私人)>CGFont
  • UIKit>GraphicsServices>CoreGraphics

    至少關於字體,蘋果工程師已經設置了UIKitCoreGraphics框架之間的抽象層,經由OBSCUR GraphicsServices之一。

  • iOS>iOS(私人)>Mac OSX

    爲什麼他們這樣做,我會說CoreGraphics,它來自Mac OSX版,是不是最佳的iOS設備,並UIKit只是iOS,他們在兩個apis之間添加了一層。或者更一般地說,他們計劃有一天將CorelDRAW的完整UIKit與Mac OSX的iOS分開......誰知道! 蘋果鄉親做,我的答案很簡單:)

關於使用自定義字體與UIKit,你可能有興趣閱讀this

相關問題