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

デベロッパマニュアルダイアログ

drawAlphaRects

 1行目からコツコツと。
CGRect ourRect = CGRectMake(0, 0, 130, 100);
は描画する矩形を設定してる。

で、 CGRect や CGRectMake がなんなのかってのを調べるには、主に

  1. 単語を選択して検索>定義へジャンプメニューを選ぶ。
  2. 単語を選択してヘルプ>APIリファレンス内で選択されたテキストを検索メニューを選ぶ。
  3. ヘルプ>マニュアルメニューで表示されるでデベロッパマニュアルダイアログで検索ボックスにCGRectやCGRectMakeといった単語を打ち込んで検索する(これのショートカットが2)。
  4. ADCを検索する。
  5. 各種ドキュメントを検索してみる。

といった方法がある。

ADCを検索する

基本中の基本。ADCのトップページの左上の検索ボックスに検索したい文字列を入れてリターンキーを押す。

int numRects = 6;
結果画面を見ると6個の矩形。これ、もしかして増やすと細かくなるのかとか、やってみよう。
int numRects = 100;

なりました。

float rotateAngle = 2*M_PI/numRects;
英語わかる人は、それなりに予想のつく変数ですな。「回転角度」。M_IPってなんだよと「定義へジャンプ」をやってみるとmath.hが開いて
#define M_PI 3.14159265358979323846264338327950288 /* pi */
πですな。2π=360度なので、一回転を矩形の数で割ってるわけだ。
float tint, tintAdjust = 1.0/numRects;
これはよくわからん。いったん保留。
/* Create the path object representing our rectangle. This
example is for demonstrating the use of a CGPath object.
For a simple rectangular shape, you'd typically use
CGContextFillRect or CGContextStrokeRect instead of this
approach.
*/
CGPathRef path = createRectPath(ourRect);
私たちの矩形を表すパスオブジェクトを作成。この参考例ではCGPathオブジェクトの使い方をデモります。
通常、簡単な矩形用には、通常CGContextFillRectやCGContextStrokeRectを使う。

て感じのこと書いてる。createRectPath関数でCGPathオブジェクトを作ってるぽいけど、そのまま下を読んでいく。

// Move the origin of coordinates to a location that allows
// the drawing to be within the window.
CGContextTranslateCTM(context, 2*ourRect.size.width,
2*ourRect.size.height);
Windowの中の画像座標原点を動かす。

で、最初に作ったourRectの値を使ってる。このsize.widthってなんだってことで、CGRectの要領で調査。sizeも同じように調べて、やってることが矩形の縦横2倍分のところを原点にしてるってことがわかる。

でも、そもそも画像座標原点とは?

ということでcocoadrawingguide.pdfやQuartz 2D Programming GuideのModifying the Current Transformation Matrixなんかを見ると各ウインドウごとに原点があって、初期設定は左下が原点だそうです。でCGContextTranslateCTMはこの原点を左下から右方向、上方向にいくつ移動したところを原点にするというAPIらしい。

cocoa drawingguide.pdf

日本語に翻訳されてる。

ありがたや。

「Cocoaを使って初めてグラフィックの描画を行おうという 開発者を対象に,Cocoa の持つ豊富かつ高性能なグラフィック描画機能の使い 方を解説」

詳細