[iOS]Quartzで文字列描画
[iOS]15パズルで、デバッグ用に数字を描画したが、反転しているが気にしないで!と説明したが、文字列描画のみの座標系を変更する方法があるのを知らなかった為だった。全体の座標を変更すると、座標計算が面倒だと思っていた。
以前のコードは以下だった。
- (void)drawContext:(CGContextRef)context
{
UIGraphicsPushContext(context);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0.7, 0.7, 0.7, 1.0);
CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1.0);
CGContextSetLineWidth(context, 1.0);
CGContextAddRect(context, self.frame);
CGContextStrokePath(context);
CGContextSelectFont(context, "Helvetica", 12.0, kCGEncodingMacRoman);
char s[32];
sprintf(s, "%d", self.index);
CGContextShowTextAtPoint(context, self.frame.origin.x + 5.0, self.frame.origin.y + 5.0, s, strlen(s));
UIGraphicsPopContext();
}
これに、CGContextSetTextMatrix()を加えれば良かった
- (void)drawContext:(CGContextRef)context
{
UIGraphicsPushContext(context);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0.7, 0.7, 0.7, 1.0);
CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1.0);
CGContextSetLineWidth(context, 1.0);
CGContextAddRect(context, self.frame);
CGContextStrokePath(context);
CGContextSelectFont(context, "Helvetica", 12.0, kCGEncodingMacRoman);
char s[32];
sprintf(s, "%d", self.index);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0)); ←ココ
CGContextShowTextAtPoint(context, self.frame.origin.x + 5.0, self.frame.origin.y + 17.0, s, strlen(s));
UIGraphicsPopContext();
}
だたし、座標の向きが変わっているので、描画するY軸の値を変更しないと、上の方に描画されてしまう。
ソースコード
GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/FifteenPuzzle - GitHub
関連情報
iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
参考にさせていただきました。
【Cocoa練習帳】
http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)