2011-01-30 58 views
0

希望這很簡單。基本上,我正在將一些文本繪製到NSView上,並需要知道正在繪製的字形的「物理」高度和寬度。用CGContextShowGlyphsAtPoint繪製文本 - 如何獲取字體大小?

字體是固定寬度所以不需要擔心字距調整,所有我需要做的是確保每個字形是它的「空間」

內水平,垂直居中這不是實際代碼,但我已經用一種方式重新編寫它,以便更容易理解我想要實現的目標。

CGFontRef myFontRef = CGFontCreateWithDataProvider(myFontDataProvider); 
CGContextSetFont(thisContext, myFontRef); 
CGFloat fontSize = 1.0; //will be changeable later 
CGContextSetFontSize(thisContext, fontSize); 
CGRect charBounds = CGRectMake(x, y, widthPerChar, heightPerChar); 
//paint charBounds with background colour 
CGFloat textX = x + 2; 
CGFloat textY = y + 5; 
CGContextShowGlyphsAtPoint(thisContext, textX, textY, (CGGlyph *)displayedString, 1); 

如果我能夠計算顯示的字形的寬度,可以很容易計算出textX和textY應該是什麼。

在此先感謝任何願意幫助的人。

+0

儘管存在NSView,但這並不是真正的可可或Objective-C(還)。增加了通用的`osx`標籤。 – NSGod 2011-01-31 00:42:17

回答

0

天色工作了來自this code - 這裏就是我想出了:

CGContextSetTextDrawingMode(thisContext, kCGTextInvisible);    
CGContextShowGlyphsAtPoint(thisContext, 1, 1, (const CGGlyph *)"x", 1); 
CGPoint postPosition = CGContextGetTextPosition(thisContext); 
CGFloat textOffsetX = ((postPosition.x - 1)/2); 
CGFloat textOffsetY = (fontSize * 5); 
CGContextSetTextDrawingMode(thisContext, kCGTextFillStroke); 

沒有這樣做這樣一個巨大的風扇,但它的工作現在。至少它可以計算一次每個窗口的大小,這不是太糟糕。

感謝您的幫助!