【发布时间】: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