getting the text up-side down in core graphic

2019-09-10 18:54发布

问题:

I am drawing a text in core graphic by following

- (void)drawRect:(CGRect)rect {
    CGContextTranslateCTM(context, 20, 150);
    CGContextScaleCTM(context, 1, 1);

    // Draw the text using the MyDrawText function
    myDrawText(context, viewBounds);

}
void myDrawText (CGContextRef myContext, CGRect contextRect) 
{
    CGFloat w, h;
    w = contextRect.size.width;
    h = contextRect.size.height;

    CGAffineTransform myTextTransform;
    CGContextSelectFont (myContext, 
                         "Helvetica-Bold",
                         h/12,
                         kCGEncodingMacRoman);
    CGContextSetCharacterSpacing (myContext, .5); 
    CGContextSetTextDrawingMode (myContext, kCGTextFill); 

    CGContextSetRGBFillColor (myContext, 1, 1, 1, 1); 
    myTextTransform =  CGAffineTransformMakeRotation  (0); 
    CGContextSetTextMatrix (myContext, myTextTransform); 
    CGContextShowTextAtPoint (myContext, 115, 0, "Successful", 10); 
}

After running it I am getting the text is in up-side down like below

Why the text is up side down after the drawing

Please advice me on this issue.

回答1:

this is the way to flip it. Just add 2 lines to your drawRect

- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 20, 150);
CGContextScaleCTM(context, 1, 1);
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, 0);
CGContextConcatCTM(context, flipVertical);

// Draw the text using the MyDrawText function
myDrawText(context, self.bounds);

}


回答2:

CGContextSetTextMatrix (myContext, myTextTransform);

You need to change this line so that instead of being identity, you scale it -1 vertically and offset it vertically by its height.

EDIT: Sorry, not that line, you need to flip the graphics context, and simply change that line to be CGAffineTransformIdentity. Any tutorial on Core Text will have the lines you need to draw text the right way.