UIKit框架 - TextKit

weixin_33782386發表於2018-03-26

一. TextKit 架構

793272-ee22aaffcffc223e.png
TextKit 架構.png

看圖就已經知道底層就是Core Text,蘋果可能感覺Core Text比較難用,在iOS 7時釋出了TextKit.

二.Text Kit中重要的一些物件

793272-528b31eec8dff6de.jpg
image.jpg

圖中主要表現NSTextContainer, NSLayoutManager, NSTextStorage之間的關係。

  • Text View是用來顯示文字內容的控制元件,主要包括UILabel、UITextView和UITextField。
  • Text containers對應著NSTextContainer類。NSTextContainer定義了文字可以排版的區域。一般來說,都是矩形區域,當然,也可以根據需求,通過子類化NSTextContainer來建立別的一些形狀,例如圓形、不規則的形狀等。NSTextContainer不僅可以建立文字可以填充的區域,它還維護著一個陣列——該陣列定義了一個區域,排版的時候文字不會填充該區域,因此,我們可以在排版文字的時候,填充非文字元素。
  • Layout manager對應著NSLayoutManager類。該類負責對文字進行編輯排版處理——通過將儲存在NSTextStorage中的資料轉換為可以在檢視控制元件中顯示的文字內容,並把統一的字元編碼對映到對應的字形(glyphs)上,然後將字形排版到NSTextContainer定義的區域中。
  • Text storage對應著NSTextStorage類。該類定義了Text Kit擴充套件文字處理系統中的基本儲存機制。NSTextStorage繼承自NSmutableAttributedString,主要用來儲存文字的字元和相關屬性。另外,當NSTextStorage中的字元或屬性發生了改變,會通知NSLayoutManager,進而做到文字內容的顯示更新。
  • 其實總結下來就是,一個文字需要先建立一個容器物件(NSTextContainer),然後還需要建立一個文字的儲存物件(NSTextStorage)。然後通過一個管理者(NSLayoutManager)把文字顯示在容器中,形成一個我們看到的UILable。

參考文章

相關文章