CoreText 是用于處理文字和字體的底層技術(shù)琅催。它直接和 Core Graphics(又被稱為 Quartz)打交道虱肄。Quartz 是一個(gè) 2D 圖形渲染引擎距帅,能夠處理 OSX 和 iOS 中的圖形顯示。
Quartz 能夠直接處理字體(font)和字形(glyphs)匾寝,將文字渲染到界面上搬葬,它是基礎(chǔ)庫中唯一能夠處理字形的模塊。因此艳悔,CoreText 為了排版急凰,需要將顯示的文本內(nèi)容、位置猜年、字體抡锈、字形直接傳遞給 Quartz。相比其它 UI 組件码倦,由于 CoreText 直接和 Quartz 來交互企孩,所以它具有高速的排版效果。
UIWebView 也是處理復(fù)雜的文字排版的備選方案袁稽。對于排版勿璃,基于 CoreText 和基于 UIWebView 相比,前者有以下好處:
CoreText 占用的內(nèi)存更少推汽,渲染速度快补疑,UIWebView 占用的內(nèi)存更多,渲染速度慢歹撒。
CoreText 在渲染界面前就可以精確地獲得顯示內(nèi)容的高度(只要有了 CTFrame 即可)莲组,而 UIWebView 只有渲染出內(nèi)容后,才能獲得內(nèi)容的高度(而且還需要用 javascript 代碼來獲扰病)
CoreText 的 CTFrame 可以在后臺線程渲染锹杈,UIWebView 的內(nèi)容只能在主線程(UI 線程)渲染。
基于 CoreText 可以做更好的原生交互效果迈着,交互效果可以更細(xì)膩竭望。而 UIWebView 的交互效果都是用 javascript 來實(shí)現(xiàn)的,在交互效果上會有一些卡頓存在裕菠。例如咬清,在 UIWebView 下,一個(gè)簡單的按鈕按下效果奴潘,都無法做到原生按鈕的即時(shí)和細(xì)膩的按下效果旧烧。
當(dāng)然,基于 CoreText 的排版方案也有一些劣勢:
CoreText 渲染出來的內(nèi)容不能像 UIWebView 那樣方便地支持內(nèi)容的復(fù)制画髓。
基于 CoreText 來排版需要自己處理很多復(fù)雜邏輯掘剪,例如需要自己處理圖片與文字混排相關(guān)的邏輯,也需要自己實(shí)現(xiàn)鏈接點(diǎn)擊操作的支持奈虾。