NSString drawInRect заставляет CGContextShowTextAtPoint неправильно отображать текст - PullRequest
2 голосов
/ 21 июля 2011

Я использую 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));

Я должен что-то здесь упустить, похоже, что оригинальный код должен сохранять и восстанавливать состояние контекста, достаточное для продолжения рисования. Любые советы или предложения?

1 Ответ

1 голос
/ 21 июля 2011

Есть небольшая опечатка? в своем коде попробуйте:

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

обратите внимание, что -1,0 теперь 1,0

...