程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CoreText 學習筆記

CoreText 學習筆記

編輯:C++入門知識

CoreText 學習筆記



一、Coretext 與 UIWebView

基於CoreText來實現和基於UIWebView來實現相比,前者有以下好處:

  1. CoreText占用的內存更少,UIWebView占用的內存更多。
  2. CoreText在渲染界面前就可以精確地獲得顯示內容的高度(只要有了CTFrame即可),而UIWebView只有渲染出內容後,才能獲得內容的高度(而且還需要用javascript代碼來獲取)
  3. CoreText的CTFrame可以在後台線程渲染,UIWebView的內容只能在主線程(UI線程)渲染。
  4. 基於CoreText可以做更好的原生交互效果,交互效果可以更細膩。而UIWebView的交互效果都是用javascript來實現的,在交互效果上會有一些卡頓存在。例如,在UIWebView下,一個簡單的按鈕按下效果,都無法做到原生按鈕的即時和細膩的按下效果。

    當然基於CoreText的方案也有一些劣勢:

    1. CoreText渲染出來的內容不能像UIWebView那樣方便地支持內容的復制。
    2. 基於CoreText來排版,需要自己處理圖片排版相關的邏輯,也需要自己處理鏈接點擊操作的支持。


      Core Text 對象模型

      \

      \


      您創建 CTFramesetter 關聯您提供的 NSAttributedString 。此時 CTTypesetter 實例將自動創建, 它管理您的字體。下一步使用 CTFramesetter 創建您要用於渲染文本的一個或多個幀。

      當您創建幀時,您指定一個用於此幀矩形內的子文本范圍。Core Text 為每行文本自動創建一個 CTLine (注意這裡) 與並創建多個 CTRun 文本分段,每個 CTRun 內的文本有著同樣的格式。

      例如,Core Text 可能為您的幾個紅色單詞創建一個 CTRun,其它 CTRun 包括純文本,另外一些 CTRun 是粗體等。再次重申,你不要自己直接創建 CTRun 實例, Core Text 使用其於您提供的 NSAttributedString 相關屬性創建它們。

      每個 CTRun 對象可以采用不同的屬性,所以你可以精確的控制字距,連字,寬度,高度等更多屬性。


      二、使用 Core Text 繪圖

      一般來說,Core Text 並沒有繪制圖像的能力。然而,因為它是一個布局引擎,它所能做的是保留一個空間讓你在其中繪制圖像。同時,因為你的代碼中已經有了 drawRect: 方法,繪制一個圖像很容易。讓我們看看在文本中保留一個空間是如何工作的: 還記得所有的文本塊實際上是 CTRun 的實例嗎?你只需為所給的 CTRun 設置委托,委托對象會負責將 CTRun 的上升空間、下降空間和寬度告知 Core Text。如下圖:

      \

      \

      要呈現圖片,你需要明確的知道圖片將顯示在應用中的哪個框架。要找到這個原點,我們需要一系列的值:

      • 當內容被滾動時:contentOffset
      • CTView 的框架的偏移 (frameXOffset,frameYOffset)
      • CTLine 的原點坐標 (CTLine 在段落的開始可能由偏移)
      • 最後是 CTRun 和 CTLine 兩者原點之間的距離。

        \

        \

        三、character && glyph


        A character is the smallest unit of written language that carries meaning, e.g. uppercase A.

        A glyph is a concrete form of a character. In our previous example, the character uppercase A can be drawn with a different size or a different stroke thickness. It can lean or be vertical, and have certain optional variations in form. The following figure represents glyphs of the character A:

        \


        \

        Note that characters and glyphs do not have a one-to-one correspondence. In some cases, a character may be represented by multiple glyphs, such as an é, which may be an e glyph combined with an acute accent glyph ′ (accent). In other cases, a single glyph may represent multiple characters, as in the case of a ligature, or joined letter. The following figure represents the ligature case:

        \

        \

        A glyph-run is a set of consecutive glyphs sharing the same attributes and direction.


        參考:

        1、http://www.dapps.net/dev/iphone/how-to-create-a-simple-magazine-app-with-core-text.html


        2、http://weblog.invasivecode.com/core-text





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved