特定のポイントでフォントグリフをある程度の精度でレンダリングしようとしていますが、かなりの問題があります。
まず、Text Position Y の値が変化しないため、グリフの高さをまったく取得できません。たとえば、次のコードでは、アサーションは常に発生します。
CGContextSelectFont(g, "Arial", 32.0f, kCGEncodingFontSpecific);
char c = 'A';
CGPoint pt = CGPointMake(400, 400);
CGContextSetTextDrawingMode(g, kCGTextInvisible);
CGContextSetTextPosition(g, pt.x, pt.y);
CGContextShowText(g, &c, 1);
CGPoint pt2 = CGContextGetTextPosition(g);
assert(pt2.y != pt.y);
グリフが線形にスケーリングされると仮定して、ハードコーディングされた幅と高さの比率を使用して、これを回避しようとしました。テキスト位置の X 値が正しく更新されることに注意してください。
ただし、より重要なのは、グリフがテキスト位置に関連してどのようにレンダリングされるかです。Y 値をグリフの中心としてレンダリングするグリフもあれば、Y 値をグリフの上部として使用するものもあれば、Y 値をグリフの下部として使用するものもあります。このすべてのデータをハードコードすることはできず、今年中にアプリを完成させたいと思っています。
上記の描画コードで間違っていることはありますか? 垂直方向の配置に関連する Quartz ドキュメントの参照が見つからず、少し迷っています。