##概観
UIKitがCoreGraphicsのラッパーになっている(らしい)。UIKitから独立してあるのではなく、UIViewのdrawRect
メソッドをオーバーライドすることで、UIViewの描画データに直接アクセスする感じで利用する。
描画データ(コンテキスト)は、CGCotextRef型(CGContext構造体へのポインタ)で、これに対して様々なC言語関数で命令を与える。
##描画方法の種類
- コンテキストに画像データを追加しこれに加工を加える。
- コンテキストにパスを追加する。
等の方法がある。パスでは、直線、曲線を繋いで図形を作成しその内部を塗りつぶしたりできる。
##描画の流れ
次の流れで描画を行う。
1.コンテキストを取得する(参照:CGCotextRef)
2.コンテキストにグラフィックステートを設定する
グラフィックステートは、線の太さ、線の端の形、線の接続部分の形、線の色、塗りつぶす色、背景との合成方法などの描画にあたっての共通のスタイルのこと。ステートの設定後に行う描画はそのステートに沿ったスタイルの描画内容となる。
3.コンテキストに対し描画を行う
##パス作成の流れ
直線、曲線を繋げたものがパス。
コンテキストに次々と点を追加していくことでパスを作成する。コンテキストは追加された点を保持していて、最後に追加された点が次の直線等の起点となり、終点のみを追加するという感じ。
##サンプルコード
- (void)drawRect:(CGRect)rect {
//コンテキストを取得
CGContextRef context = UIGraphicsGetCurrentContext();
//グラフィックステートを設定
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextSetLineWidth(context, 10.0);
CGContextSetLineCap(context, kCGLineCapRound);
//(保持していたパスのポイント等を破棄して)新たなパス描画を開始する
CGContextBeginPath(context);
//パスを作成
CGContextMoveToPoint(context, 50, 50);
CGContextAddLineToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 150, 50);
//パスの描画を実行
CGContextDrawPath(context, kCGPathStroke);
}