Я использую CGContextRef в моем приложении IOS, чтобы создать PDF-файл, наряду с некоторыми служебными методами, которые я создал, чтобы сделать такие элементы, как линии, текст, изображения и т.д.NSString drawInRect вызывает CGContextShowTextAtPoint неправильно отображать текст,
у меня есть следующий метод, который я использовал, чтобы нарисовать несколько линии текстовой строки 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));
Я должен что-то отсутствует здесь, кажется, как оригинал код должен сохранять и восстанавливать состояние контекста, достаточное для продолжения рисования. Любые подсказки или предложения?
Я нашел этот код в другом посте переполнения стеки относительно перевернутого текста чертежа. Я точно не знаю, как и почему он работает, но, похоже, он делает то, что ему нужно делать сейчас. Благодарю. –