9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CoreGraphics 基礎の基礎

Last updated at Posted at 2016-03-19

##概観
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);
}
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?