2010-10-10 85 views
9

我可以用Core Text繪製富文本,問題是將圖像與文本一起放置。 (iOS SDK 4.1)如何使用CoreText在富文本中繪製圖像? (iOS)

我試圖繪製某種豐富的文本。問題是設計師在文本中放置了許多圖標。所以我必須繪製文字是這樣的:

Here is a word <an icon image>, and another words. 
The image(<another icon>) should be placed like a glyph. 
It's part of text, not an example. 

<icon>是圖像。 (這不是代碼,只是一個插圖。)

我可以通過手工繪製所有這些圖表來繪製它,但是它很難保持複雜的文本佈局行爲。所以我找到了一種用Core Text畫出來的方法。

回答

9

我得到了解決方案。

佈置非文字內容的關鍵是CTRunDelegateCore Text不支持非文本內容,因此您必須爲它們留出空白區域,然後再繪製或放置它們。

歸因於kCTRunDelegateAttributeNameNSAttributedString的一部分將調用已註冊的回調來確定每個字形的寬度。這將讓您爲每個非文本對象製作空白區域。

但是,在用Core Text繪製文本後,使用frame/line/run存儲的佈局信息將失效。因此,在使用framesetter/typesetter進行佈局之後,但在繪製之前,必須繪製/放置非文本內容。

此鏈接介紹CTRunDelegate的基本用法:
How to use CTRunDelegate in iPad?


沒有與核心文本的一個問題。最初,CTRunDelegate旨在通過CTRunDelegateCallbacks.getAscentCTRunDelegateCallbacks.getDescent支持可變寬度和垂直對齊。但垂直對齊功能目前無法使用。這可能是一個錯誤。

我這裏介紹這個問題: Aligning multiple sized text vertical center instead of baseline with Core Text in iOS

如果你有關於這個問題的信息,請參閱我的問題的鏈接。

3

您只需爲給定的CTRun設置一個委託,委託對象負責讓知道的核心文本什麼是CTRun上升空間,下降空間和寬度。

當核心文本「達到」一個CTRun有一個CTRunDelegate時,它會詢問委託 - 我應該爲這個數據塊留下多少寬度,它應該有多高?通過這種方式,您可以在文本中創建一個洞 - 然後在該位置繪製圖像。

enter image description here

這是一個關於核心Text.It博客對你答案。

How To Create a Simple Magazine App with Core Text

相關問題