CoreText 是用于處理文字和字體的底層技術(shù)。它直接和 Core Graphics(又被稱為 Quartz)打交道。Quartz 是一個(gè) 2D 圖形渲染引擎,能夠處理 OSX 和 iOS 中的圖形顯示。
Quartz 能夠直接處理字體(font)和字形(glyphs),將文字渲染到界面上,它是基礎(chǔ)庫(kù)中唯一能夠處理字形的模塊。因此,CoreText 為了排版,需要將顯示的文本內(nèi)容、位置、字體、字形直接傳遞給 Quartz。相比其它 UI 組件,由于 CoreText 直接和 Quartz 來(lái)交互,所以它具有高速的排版效果。
UIWebView 也是處理復(fù)雜的文字排版的備選方案。對(duì)于排版,基于 CoreText 和基于 UIWebView 相比,前者有以下好處:
CoreText 占用的內(nèi)存更少,渲染速度快,UIWebView 占用的內(nèi)存更多,渲染速度慢。
CoreText 在渲染界面前就可以精確地獲得顯示內(nèi)容的高度(只要有了 CTFrame 即可),而 UIWebView 只有渲染出內(nèi)容后,才能獲得內(nèi)容的高度(而且還需要用 javascript 代碼來(lái)獲取)
CoreText 的 CTFrame 可以在后臺(tái)線程渲染,UIWebView 的內(nèi)容只能在主線程(UI 線程)渲染。
基于 CoreText 可以做更好的原生交互效果,交互效果可以更細(xì)膩。而 UIWebView 的交互效果都是用 javascript 來(lái)實(shí)現(xiàn)的,在交互效果上會(huì)有一些卡頓存在。例如,在 UIWebView 下,一個(gè)簡(jiǎn)單的按鈕按下效果,都無(wú)法做到原生按鈕的即時(shí)和細(xì)膩的按下效果。
當(dāng)然,基于 CoreText 的排版方案也有一些劣勢(shì):
CoreText 渲染出來(lái)的內(nèi)容不能像 UIWebView 那樣方便地支持內(nèi)容的復(fù)制。
基于 CoreText 來(lái)排版需要自己處理很多復(fù)雜邏輯,例如需要自己處理圖片與文字混排相關(guān)的邏輯,也需要自己實(shí)現(xiàn)鏈接點(diǎn)擊操作的支持。