希望这很简单。基本上,我正在将一些文本绘制到NSView上,并且需要知道正在绘制的字形的“物理”高度和宽度。
字体是固定宽度的,所以我不需要担心字距,我需要做的就是确保每个字形在其“空间”内水平和垂直居中
这不是实际的代码,但我重新编写它的方式应该会让我更容易理解我想要实现的目标。
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 :(得分: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);
不喜欢这样做,但它现在正在运作。至少可以为每个窗口调整大小计算一次,这不是太糟糕。
感谢您的帮助!
答案 1 :(得分:0)
您可以通过以下方式计算单个字形的宽度:
CGRect units;
CGFontGetGlyphBBoxes(font, &glyph, 1, &units);
float width = units.size.width/CGFontGetUnitsPerEm(font)*fontSize;