NSString drawInRect导致CGContextShowTextAtPoint错误地显示文本

时间:2011-07-20 20:48:22

标签: ios4 pdf nsstring cgcontext

我在iOS应用程序中使用CGContextRef创建PDF,以及我创建的一些实用工具方法,用于绘制线条,文本,图像等项目。

我使用以下方法将多行文本字符串绘制到CGContextRef:

- (void)drawTextBlock:(NSString *)theText x:(CGFloat)x y:(CGFloat)y width:(CGFloat)w height:(CGFloat)h
{
    if (theText == nil)
    {
        return;
    }

    UIGraphicsPushContext(pdfContext);

    CGContextSaveGState(pdfContext);
    CGContextTranslateCTM(pdfContext, 0.0f, PDF_HEIGHT);
    CGContextScaleCTM(pdfContext, 1.0f, -1.0f);

    [theText drawInRect:PDFCGRectMake(x, 11.0 - y - h, w, h) withFont:[UIFont systemFontOfSize:fontSize]];

    CGContextRestoreGState(pdfContext);

    UIGraphicsPopContext();
}

此代码适用于绘制文本块,但如果我在执行此代码后尝试使用CGContextShowTextAtPoint绘制任何其他文本,则文本会变得过大且颠倒。

如果我在方法结束时添加此行,则大小会恢复正常,但文本仍然是颠倒的:

CGContextSetTextMatrix(pdfContext, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));

我必须在这里遗漏一些东西,似乎原始代码应该保存并恢复上下文状态,以便绘图继续正常。任何提示或建议?

1 个答案:

答案 0 :(得分:1)

有一个小错字?在你的代码中,尝试:

CGContextSetTextMatrix(pdfContext, CGAffineTransformMake(1.0, 0.0, 0.0, 1.0, 0.0, 0.0));

注意-1.0现在是1.0