2011-06-03 20 views
0

我正在爲我的應用程序的文本添加功能。這段文字將會添加到CGContext和Quartz 2D中。變量text從UITextField的文本屬性中拉出。編碼和轉換中的Quartz 2D Text Drawing錯誤?

這裏是我到目前爲止的代碼:

CGRect textBox = CGRectMake(0, 0, 300, 200); 
UIView *textView = [[UIView alloc] initWithFrame:textBox]; 
const char *textChar = [text UTF8String]; 

NSInteger xLocation = (contentOffset.x + 100); 
CGContextSelectFont (UIGraphicsGetCurrentContext(), "Helvetica", 14.0f, kCGEncodingMacRoman); 
CGContextSetShouldSmoothFonts(UIGraphicsGetCurrentContext(), YES); 
CGContextSetCharacterSpacing (UIGraphicsGetCurrentContext(), 10); 
CGContextSetTextDrawingMode (UIGraphicsGetCurrentContext(), kCGTextFill); 
CGContextSetRGBFillColor (UIGraphicsGetCurrentContext(), 255, 255, 255, 1.0); 
CGContextShowTextAtPoint (UIGraphicsGetCurrentContext(), xLocation, 110, textChar, 9); 
[drawGallery addSubview:textView]; 

我有幾個問題是:

  1. 的文本渲染翻轉 - (這是很容易與變換整流,但我遵循的教程沒有這個問題,所以我有點困惑LINK)。

  2. 文字呈現奇怪的字符 - 我認爲這是一個編碼問題,但我該如何調整呢?

  3. 該文本沒有被添加到addSubview行的視圖中,它只在CGContext更新時才被添加,即我也有畫線功能,如果我在視圖上繪製,那麼文本會奇蹟般地彈出向上。

  4. 該文本是可怕的鋸齒狀和嚴重呈現,有什麼我可以做到這一點?我添加了一個CGContextSetShouldSmoothFonts,但它似乎沒有做任何事情。

請參閱以下的例子:

strange characters

感謝所有幫助你可以給。

+0

您是否在drawRect方法中使用了與文本相關的CGContext *函數? – user478681 2011-06-03 14:35:16

回答

2

對於文本翻轉,給別人解決同樣的問題被張貼text inverted problem solution [Stackoverflow] - 使用:

CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));     

對於編碼的問題,您正在使用[text UTF8String]獲取文本的CString(UTF8字符是通用多字節)但CGContextSelectFont()指定MacRoman(單字節格式)。

朱利安

0

我已經想出了這些錯誤的大部分。

  1. 的文本渲染翻轉

  2. 的文本渲染與奇怪的字符 - 我覺得這是一個 編碼的問題,而是如何調整 呢?

  3. 文本不會被添加到在addSubview線來看,它僅在CGContext上被 更新 被添加,即我有畫線 功能也是一樣,如果我的看法 然後畫文本奇蹟般地彈出。

  4. 該文本是可怕的鋸齒狀和嚴重呈現,有我可以爲此做的 ?我添加了一個 CGContextSetShouldSmoothFonts,但它 似乎沒有做任何事情。

  1. 使用一個基本的轉換,我就能夠自動翻轉文本。

  2. 這裏我調整了編碼,所以MacRoman始終都在使用。

  3. 我不得不手動調用一個更新 - 我寫了一個函數,做到這一點,並在需要它的地方調用它。

  4. 由於文本打印在循環中被捕獲,似乎將文本多次打印在彼此的頂部,因此鋸齒狀。