トップ «前の日記(2012-07-29) 最新 次の日記(2012-08-04)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|

2012-07-30 [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/(ミラー・サイト)

トップ «前の日記(2012-07-29) 最新 次の日記(2012-08-04)» 編集