2010-07-05 6 views
6

Я пишу простую практику. Тем не менее, мой текст переворачивается вверх дном, когда я пытаюсь использовать CGContext, чтобы поместить некоторую строку в UIView, мне интересно, почему и как изменить ее в правильный формат.Почему мой текст переворачивается при использовании CGContextShowAtPoint?

Вот мой код в DrawRect

char *string = "TEST"; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextBeginPath(context); 
CGContextSelectFont (context,"Helvetica-Bold",12, kCGEncodingMacRoman); 

CGContextShowTextAtPoint(context, 5, 5, string, strlen(string)); 

CGContextClosePath(context); 

Thanx за вашу помощь.

ответ

5

CoreGraphics использует декартовы координаты, поэтому вам нужно перевести свой контекст, прежде чем делать какие-либо рисунок

CGContextRef context = UIGraphicsGetCurrentContext(); 

// transforming context 
CGContextTranslateCTM(context, 0.0, rect.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

// your drawing code 
2

Используйте UIKit additions in NSString:

NSString *string = @"TEST"; 
[string drawAtPoint:CGPointMake(5, 5) 
      withFont:[UIFont boldSystemFontOfSize:12]]; 
+0

Thanx, мне это очень помогает. – user384007

5

Quartz2D имеет перевернутую ось у - удобный да? Если вы используете метод drawRect, вы можете использовать следующее, чтобы перевернуть текст.

CGContextTranslateCTM(context, 0.0, rect.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

Другой способ;

transform = CGAffineTransformMake(1.0,0.0,0.0,-1.0,0.0,0.0); 
CGContextSetTextMatrix(context, transform); 

Или на одной линии;

CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0)); 
+0

CGContextSetTextMatrix (контекст, CGAffineTransformMake (1.0,0.0, 0.0, -1.0, 0.0, 0.0)); работал на меня. – pa12

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