iPhone PDF создание инвертирования текста проблема - PullRequest
0 голосов
/ 01 марта 2012

Я создаю приложение для 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);
}

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

Ответы [ 2 ]

1 голос
/ 02 марта 2012

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

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

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

0 голосов
/ 01 марта 2012

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

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

Спасибо

...