2011-01-30 71 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); 

没有这样做这样一个巨大的风扇,但它的工作现在。至少它可以计算一次每个窗口的大小,这不是太糟糕。

感谢您的帮助!