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