2010-02-24 83 views
1

我想以某種精度在特定點渲染字體字形,並且遇到了相當多的麻煩。iPhone SDK Quartz Glyph圖畫

首先,文本位置Y值永遠不會改變,所以我無法得到字形的高度。例如,在下面的代碼,則斷言始終閃光:

CGContextSelectFont(g, "Arial", 32.0f, kCGEncodingFontSpecific); 

char c = 'A'; 
CGPoint pt = CGPointMake(400, 400); 

CGContextSetTextDrawingMode(g, kCGTextInvisible); 
CGContextSetTextPosition(g, pt.x, pt.y); 
CGContextShowText(g, &c, 1); 

CGPoint pt2 = CGContextGetTextPosition(g); 
assert(pt2.y != pt.y); 

我試圖解決此使用一些硬編碼的寬度與高度的比率,假定字形線性比例。請注意,文本位置的X值已正確更新。

但是,更重要的是字形如何與文本位置相關呈現;一些字形以Y值作爲字形的中心進行渲染,一些使用Y值作爲字形的頂部,另一些使用Y值作爲字形的底部。我無法對所有這些數據進行硬編碼,並希望在今年的任何時候都可以完成我的應用。

在上面的繪圖代碼中是否有任何錯誤的操作?我在石英文檔中找不到與垂直對齊相關的任何參考,並且有點失落。

回答

0

從我已經發現的這是一個相當複雜的任務。我會檢查出zynga's LabelFont library,並從他們的代碼中學習或簡單地使用該庫。特別是看看LabelFont類的'drawTextInRect:方法。

+0

感謝您的鏈接。我在一週前看過這個,這並不符合我的需求;它要複雜得多,而且這些方法似乎更適合動態調整大小。我不需要將字形更改爲匹配矩形,我需要一個矩形作爲字形! – Chris 2010-02-24 20:33:43

+0

檢出sizeWithZFont:在FontLabelStringDrawing類中。 – Felixyz 2010-02-24 22:50:35