前へ Xcc>クォーツの世界 次へ

画像座標原点

 コンピュータには珍しく、幾何学の授業で見かける、上と右に増えるX,Y座標が Quartz の基本。たぶん PostScript からきてるんでしょう。んじゃ、ちょっとずらしてみるべかと

CGContextTranslateCTM(context, 2*ourRect.size.width - 25,
2*ourRect.size.height - 50);

こうすると

て感じで、ちょっと右上にずれるはず。

ずれましたね〜。

PostScript

 Adobeが開発したページ記述言語。

詳細

// Set the fill color to a red color.
CGContextSetFillColorWithColor(context, myGetRedColor());
塗りつぶす際の色を指定してる。myGetRedColorはとりあえず無視。
for(tint = 1.0; 0 < tint ; tint -= tintAdjust){
ここで tint と tintAdjust が出てきました。for ってのはループ制御文で

for(初期設定; 条件が成り立つ間ループ ; 一回のループ毎に変化させる内容){ ここから
...
} ここまでを繰り返す

というもの。となると

tint = 1.0
が初期設定
0 < tint
の間ループし、ループ一回ごとに
tint -= tintAdjust
を実行ということ。保留しておいた
tintAdjust = 1.0/numRects;
を、考えるとnumRects回ループしたらお終いってことなわけだ。
で、なにが繰り返されるかというと

// Set the global alpha to the tint value.
CGContextSetAlpha(context, tint);
透明度の設定。ここでもtint使ってますな。最初が1.0でどんどん0.0に近くなるわけだ。実際画像見るとどんどん薄くなっている。
// For a CGPath object that is a simple rect,
// this is equivalent to CGContextFillRect.
CGContextBeginPath(context);
CGContextAddPath(context, path);
CGContextFillPath(context);
CGPathオブジェクトの塗りつぶし描画らしいけど、コンテキストのパスを空にしてCGPathオブジェクトを追加パスを塗りつぶしってやってますな。
矩形程度なら変わりにCGContextFillRectで代用できるよって書いてるから実験してみる。書かれている処理を無効にするには以下のようなマクロ文を使う。
#if 1
CGContextFillRect(context, ourRect);
#else
CGContextBeginPath(context);
CGContextAddPath(context, path);
CGContextFillPath(context);
#endif

どうでしょう。なんにも変わらないですな。ということは、 CGContextFillRect が立派に機能するってことです。ま〜サンプルなんでパスの使い方の紹介ということで、わざわざめんどくさいCGPathオブジェクトを使ってるわけですな。

マクロ文

#if の他に #define とかいろいろ。

#if 1
新しい処理
#else
無効にしたい処理
#endif

#if 1の1は0以外なら100でも666でもいい。