获取有关Core Text中字形的信息

时间:2014-04-13 21:55:24

标签: ios core-graphics core-text glyph

我刚刚在SO上看到了recent question,这与我在这里要求的内容有些接近。

所以我试图使用Core Text和NSAttributedString排版数学方程式。对于像x 2 这样的表达式,它工作得非常好,但是当我使用y时,我遇到了一个问题。也就是说,'y'有一个下降器,我不知道如何在我的绘图代码中考虑:

CGContextSaveGState(context);
CGContextTranslateCTM(context, x, sizeOfGlyph.height / 2.0);
CGContextScaleCTM(context, 1.0, -1.0);

CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)attributedSubstring);
CGContextSetTextPosition(context, 0.0, 0.0);
CTLineDraw(line, context);

CFRelease(line);
CGContextRestoreGState(context);

基本上,我将上下文翻译为字形高度的一半(如计算here),以在字形的基线处开始文本。正如您可以想象的那样,这会遇到像'y'这样的字形问题,因为字形的一半高度不是字形的基线。我不认为使用字体的下行器就足够了,因为我无法知道这个字形是否有下降器。所以我想知道的是是否有办法找到特定字形的下行(或任何所需的指标)?

关于这个主题的任何专业知识都会受到赞赏,我刚刚开始使用Core Text。

1 个答案:

答案 0 :(得分:4)

我最终做的是使用从图像边界函数返回的字形的原点。我使用this answer中概述的方法计算了字形的边界。结果CGRect的原点给出了字形左下角的y位置,在“' y”的情况下。会是负面的。因此,通过将glyphRect.origin.y + glyphRect.size.height加在一起,您可以获得从字形顶部到基线的距离。