2012-03-01 3 views
0

Я создаю приложение iphone для создания pdf. Я использую следующий код:iPhone PDF создание текста инвертирование вопрос

[self drawRect:CGRectMake(0, 0, 100, 20)text:@"last Name"xVal:10 yVal:-30 len:9]; 
    [self drawRect:CGRectMake(0, 0, 100, 20)text:@"First Name"xVal:180 yVal:30 len:10]; 
    [self drawRect:CGRectMake(0, 0, 100, 20)text:@"Middle Name"xVal:330 yVal:-30 len:11]; 

    + (void) drawRect:(CGRect)rect text:(NSString *)string xVal:(int)x yVal:(int)y len:(int)length{ 
     CGContextRef theContext = UIGraphicsGetCurrentContext(); 
     CGRect viewBounds = rect; 
     CGContextTranslateCTM(theContext, 0, viewBounds.size.height); 
     CGContextScaleCTM(theContext, 1, -1); 
     // Draw the text using the MyDrawText function 
     MyDrawText(theContext, viewBounds,string, x, y,length); 
    } 
void MyDrawText (CGContextRef myContext, CGRect contextRect, NSString *textToDraw, int x, int y, int len){ 
    float w, h; 
    w = contextRect.size.width; 
    h = contextRect.size.height; 
    CGAffineTransform myTextTransform; 

    CGContextSelectFont (myContext,"Helvetica-Bold", h, kCGEncodingMacRoman); 

    CGContextSetCharacterSpacing (myContext, 3); 
    CGContextSetTextDrawingMode (myContext, kCGTextFill); 
    CGContextSetRGBFillColor(myContext, 0, 0, 0, 1);  

    CGContextSetRGBStrokeColor (myContext, 0, 0, 0, 0); 
    myTextTransform = CGAffineTransformMakeRotation(0.0); 
    CGContextSetTextMatrix (myContext, myTextTransform); 
    const char *str = [textToDraw UTF8String]; 
    CGContextShowTextAtPoint (myContext, x, y,str, len); 
} 

Когда я использую этот код я получаю выход, как, первое и третье слово хорошо, но второй один подходит как перевернутый (вниз головой). Почему так? Есть идеи?

ответ

1

Проблема была с CGContextRef theContext = UIGraphicsGetCurrentContext();, когда каждый раз вызывает функцию, то CGContext принимает последнее состояние, поэтому получение выходного инвертирования. Итак, я добавил,

CGContextRef theContext = UIGraphicsGetCurrentContext(); 
CGContextSaveGState(theContext); 
//code to draw.... 
CGContextRestoreGState(theContext); 

это решило проблему. Спасибо :)

0

Core Graphics считает нижний левый угол в качестве координат для рисования. (В UIKit его Top-Left).

Здесь в вашем методе вызывается вторая строка, которую вы предоставляете yVal как 30 и другие значения как -30.

Спасибо,

+0

yVal просто меняет положение по оси Y. Это не контролирует инвертирующую природу текста. Я изменил это на 30, но никаких изменений, но положение было изменено. – Mithuzz

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