iPhone SDK石英雕文绘图

时间:2010-02-24 07:22:00

标签: iphone objective-c quartz-graphics glyph

我试图以一定的精度在特定点渲染字体字形,并且我遇到了相当多的麻烦。

首先,文本位置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文档中找不到任何参考,并且有点遗失。

1 个答案:

答案 0 :(得分:0)

据我所知,这是一项相当复杂的任务。我会查看zynga's LabelFont library并从他们的代码中学习或只是使用该库。特别是看看LabelFont类'drawTextInRect:方法。