一. TextKit 架構

TextKit 架構.png
看圖就已經(jīng)知道底層就是Core Text,蘋果可能感覺Core Text比較難用,在iOS 7時發(fā)布了TextKit.
二.Text Kit中重要的一些對象

image.jpg
圖中主要表現(xiàn)NSTextContainer, NSLayoutManager, NSTextStorage之間的關系。
- Text View是用來顯示文本內(nèi)容的控件,主要包括UILabel、UITextView和UITextField。
- Text containers對應著NSTextContainer類。NSTextContainer定義了文本可以排版的區(qū)域。一般來說,都是矩形區(qū)域,當然,也可以根據(jù)需求,通過子類化NSTextContainer來創(chuàng)建別的一些形狀,例如圓形、不規(guī)則的形狀等。NSTextContainer不僅可以創(chuàng)建文本可以填充的區(qū)域,它還維護著一個數(shù)組——該數(shù)組定義了一個區(qū)域,排版的時候文字不會填充該區(qū)域,因此,我們可以在排版文字的時候,填充非文本元素。
- Layout manager對應著NSLayoutManager類。該類負責對文字進行編輯排版處理——通過將存儲在NSTextStorage中的數(shù)據(jù)轉換為可以在視圖控件中顯示的文本內(nèi)容,并把統(tǒng)一的字符編碼映射到對應的字形(glyphs)上,然后將字形排版到NSTextContainer定義的區(qū)域中。
- Text storage對應著NSTextStorage類。該類定義了Text Kit擴展文本處理系統(tǒng)中的基本存儲機制。NSTextStorage繼承自NSmutableAttributedString,主要用來存儲文本的字符和相關屬性。另外,當NSTextStorage中的字符或屬性發(fā)生了改變,會通知NSLayoutManager,進而做到文本內(nèi)容的顯示更新。
- 其實總結下來就是,一個文字需要先創(chuàng)建一個容器對象(NSTextContainer),然后還需要創(chuàng)建一個文字的存儲對象(NSTextStorage)。然后通過一個管理者(NSLayoutManager)把文字顯示在容器中,形成一個我們看到的UILable。