2011-07-20 3 views
2

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

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

ответ

1

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

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

Примечания -1,0 теперь 1,0

+0

Я нашел этот код в другом посте переполнения стеки относительно перевернутого текста чертежа. Я точно не знаю, как и почему он работает, но, похоже, он делает то, что ему нужно делать сейчас. Благодарю. –

Смежные вопросы