【问题标题】:NSString drawInRect causes CGContextShowTextAtPoint to incorrectly display textNSString drawInRect 导致 CGContextShowTextAtPoint 错误地显示文本
【发布时间】:2011-07-20 20:48:21
【问题描述】:

我在我的 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));

我必须在这里遗漏一些东西,看起来原始代码应该保存和恢复上下文状态,足以让绘图继续正常进行。有什么提示或建议吗?

【问题讨论】:

    标签: ios4 pdf nsstring cgcontext


    【解决方案1】:

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

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

    注意 -1.0 现在是 1.0

    【讨论】:

    • 我在另一个 Stack Overflow 帖子中发现了有关反转文本绘制的代码。我不确定它究竟是如何或为什么起作用的,但它似乎正在做它现在需要做的事情。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多