我在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));
我必须在这里遗漏一些东西,似乎原始代码应该保存并恢复上下文状态,以便绘图继续正常。任何提示或建议?
答案 0 :(得分:1)
有一个小错字?在你的代码中,尝试:
CGContextSetTextMatrix(pdfContext, CGAffineTransformMake(1.0, 0.0, 0.0, 1.0, 0.0, 0.0));
注意-1.0现在是1.0