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

arc*_*ist 7 glyph core-graphics core-text ios

我刚刚在SO上看到了这个最近的问题,这与我在这里提出的要求有些接近.

所以我试图使用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);
Run Code Online (Sandbox Code Playgroud)

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

关于这个主题的任何技术诀窍都会受到赞赏,我刚刚开始使用Core Text.

arc*_*ist 5

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