Я использую CGContextRef в своем приложении для iOS для создания 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));
Я должен что-то здесь упустить, похоже, что оригинальный код должен сохранять и восстанавливать состояние контекста, достаточное для продолжения рисования. Любые советы или предложения?