IOS開發之——CoreText

來源:互聯網
上載者:User

來源:http://iosdeveloper.diandian.com/post/2012-11-16/40041182749

Core Text是iOS 3.2+和OSX 10.5+的文本渲染引擎,可以讓你自由的控制文字格式設定和排版。

     Core Text不同於UIKit和Core Graphics/Quartz(雖然通過後兩者你也可以進行文字渲染):

  • 在UIKit中,你可以使用UILabel來顯示文字,它的操作非常簡單,但是你沒有辦法控制UILabel中單獨一個字元的字型顏色。也就是說,沒有辦法進行富文本的顯示。

  • 在Core Graphics/Quartz中你可以非常漂亮的做系統所能做的每一件事,但是你必須要自己計算每個字元的位置,然後再把它渲染到螢幕上。也就是說它無法進行文字排版。 

  • Core Text  正是以上兩點的結合。你既可以控制文字的位置、布局、顏色、大小等等屬性,又不需要實際操心字元位置、文字斷行等瑣事。

  • Core Text物件模型這裡簡單介紹一下Core Text渲染文本的一些基本概念,以便有助於理解CoreText的工作機制。

    是Core Text物件模型:

     

    我們通過NSAttributedString建立一個CTFramesetter,這時候會自動建立一個 CTTypesetter執行個體,它負責管理字型,下面通過CTFramesetter來建立一個或多個frame來渲染文字。然後Core Text會根據frame的大小自動建立CTLine(每行對應一個CTLine)和CTRun(相同格式的一個或多個相鄰字元組成一個CTRun)。

    文檔原文解釋:

    A line object contains glyph-run objects, represented by the CTRun opaque type. A glyph run is a set of consecutive glyphs sharing the same attributes and direction. The typesetter creates glyph runs as it produces lines from character strings, attributes,
    and font objects. That is, a line is constructed of one or more glyphs runs. Glyph runs can draw themselves into a graphic context, if desired, although most clients have no need to interact directly with glyph runs. Figure 1-4 shows the conceptual hierarchy
    of a frame object containing line objects that, in turn, contain glyph-run objects.

    Figure 1-4  A frame object containing lines and glyph runs

         舉例來說,Core Text將建立一個CTRun來繪製一些紅色文字,然後建立一個CTRun來繪製純文字,然後再建立一個CTRun來繪製加粗文字等等。要注意,你不需要自己建立CTRun,Core Text將根據NSAttributedString的屬性來自動建立CTRun。每個CTRun對象對應不同的屬性,正因此,你可以自由的控制字型、顏色、字間距等等資訊。

 

 

看一下iOS平台下CoreText的一些常用的類。


NSAttributedString CFAttributedString 一段有自己樣式(統一不可變)的文字
NSMutableAttributedString CFMutableAttributedString 一段有多種樣式的文字

CTFrame
1.CGPath -> CGPathGetBoundingBox 得到佔用的地區大小
2.CTFrameGetLineOrigins 可以得到每行的起始位置
3.還可以控制文字橫排豎排等

CTFramesetter
1.CTFramesetterSuggestFrameSizeWithConstraints 確定文字所需區域大小或指定地區可以顯示多少文字

CTLine
1.CTLineGetStringIndexForPosition 確定地區內點處文字範圍

NSTextCheckingResult 代表各種連結,時間地址電話網址自訂等。

NSDataDector
這是一個專門配合NSTextCheckingResult檢測是否是特定連結的類。繼承於NSRegularExpression類。
enumerate 遍曆
match 匹配的數組
numbersOfMatch 匹配的個數


1.使用core text就是先有一個要顯示的string,然後定義這個string每個部分的樣式->attributedString -> 產生 CTFramesetter -> 得到CTFrame -> 繪製
其中可以更詳細的設定換行方式,對齊,繪製地區的大小等。
2.繪製只是顯示,點擊事件呢?就需要一個判斷了。
CTFrame 包含了多個CTLine,並且可以得到各個line的其實位置與大小。判斷點擊處在不在某個line上。CTLine 又可以判斷這個點(相對於ctline的座標)處的文字範圍。然後遍曆這個string的所有NSTextCheckingResult,根據result的rang判斷點擊處在不在這個rang上,從而得到點擊的連結與位置。處理。

 

 

 

轉自:pjk1129

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.