1

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 を削除すると、パスが上下逆になります。誰かがこれを解決するのを手伝ってくれませんか。

4

2 に答える 2

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);

}

于 2013-07-25T13:28:00.103 に答える