iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
[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軸の値を変更しないと、上の方に描画されてしまう。