iOS:混合核心图形绘制路径和UIKit绘制文本功能

时间:2013-07-24 11:08:08

标签: ios nsstring core-graphics drawrect

我在UIView的扩展类的drawrect方法中使用以下上下文来绘制路径和字符串。

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -rect.size.height);

绘制路径我使用

CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0f);
CGContextSetLineWidth(context, 1);
CGContextBeginPath(context);
CGContextMoveToPoint(context, origin.x, origin.y);
CGContextAddLineToPoint(context, currentX, origin.y);
......
CGContextStrokePath(context);

要使用

绘制文字
CGContextSetLineWidth(context, 2.0);    
[self.title drawInRect:CGRectMake(100, 100, 200, 40) withFont:font];

我正确地获得路径,但文字却朝下!如果我删除了CGContextScaleCTM和CGContextTranslateCTM,我会将路径向上移动!有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

在绘制路径之前保存上一个上下文,然后将其恢复:

CGContextRef context = UIGraphicsGetCurrentContext();

// save the original context
CGContextSaveGState(context);

CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -rect.size.height);

// draw path

// restore the context
CGContextRestoreGState();

// draw text

应该这样做。

答案 1 :(得分:1)

我最终编写了以下代码。可以帮助别人!

- (void)drawText:(NSString*)text context:(CGContextRef)context rect:(CGRect)rect verticle:(BOOL)verticle {
    CGAffineTransform translate = CGAffineTransformMakeTranslation(0, -rect.size.height);
    CGAffineTransform transform = translate;

    if(verticle) {
        CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI/2);
        transform = CGAffineTransformConcat(translate, rotation);
    }

    CGContextSetTextMatrix(context, transform);
    CGContextShowTextAtPoint(context, rect.origin.x, rect.origin.y, [text UTF8String], text.length);

}