« iphone 開発 サンプル「Simple Undo」を読む。 | トップページ | iphone application "BM-drawer" support page »

2010年7月 7日 (水)

QuartzDemoを読む 1

iPhone OS Reference Libraryに、QuartzDemoというサンプルプロジェクトがある。
今回はこれを読みます。

なんかファイルがいっぱいあるんで関係を整理したい。

Classes/AppDelegate.h/m:
ビューとナビゲーションコントローラを設定する。

Classes/MainViewController.h/m:
デモへのメインインタフェースを実行する。ユーザは表示するデモを選択する。
Implements the main interface to the demo application, allowing the user to display which of Quartz's drawing facilities to demonstrate.

Classes/QuartzView.h/m:
UIViewのサブクラス。これは他のデモのスーパークラス。

Classes/QuartzViewController.h/m:
UIViewControllerのサブクラス。一つのQuartzViewを管理し、ズームやパンをする。

以下は、 QuartzViewControllerのサブクラス
Classes/QuartzBlendingViewController.h/m:
Classes/QuartzPolyViewController.h/m:
Classes/QuartzGradientController.h/m:
Classes/QuartzLineViewController.h/m:
Classes/QuartzDashViewController.h/m:


以下はQuartzViewのサブクラス
Quartz/QuartzLines.h/m:
Quartz/QuartzPolygons.h/m:
Quartz/QuartzCurves.h/m:
Quartz/QuartzImages.h/m:
Quartz/QuartzRendering.h/.m:
Quartz/QuartzBlending.h/.m:
Quartz/QuartzClipping.h/m:

○MainViewController

これは、UITableViewControllerのサブクラス。
メソッド:viewDidLoadで、各ビューコントローラを生成し、テーブルビューの要素に追加している。
行が選択されると、対応するビューコントローラが表示対象になる。

コントローラを生成する方法に2つある。
1.controller = [[QuartzViewController alloc] initWithNibName:@"DemoView" viewClass:[QuartzLineView class]];
2.controller = [[QuartzLineViewController alloc] init];

2つ目の方も、QuartzLineViewControllerのinitメソッドで下記のようになる。
-(id)init
{
return [super initWithNibName:@"LineView" viewClass:[QuartzCapJoinWidthView class]];
}

NibNameは、UIViewControllerの指定で、viewClassは、そこに乗せるUIViewだろう。
単純な表示のみの画面は、DemoViewで表示し、ユーザが選択するものは個別のxibを指定している。


○QuartzViewController

プロパティにQuartzViewを持っている。
QuartzView *quartzView;

メソッド:-(id)initWithNibName:(NSString*)nib viewClass:(Class)vc が生成を担当。

○QuartzView.h

メソッドが1つ定義されてるだけ
// As a matter of convinience we'll do all of our drawing here in subclasses of QuartzView.
これを使って、QuartzViewのサブクラスで全ての描画を行う。
-(void)drawInContext:(CGContextRef)context;

ヘッダーには定義されていないが下記の実装がある。(UIViewのメソッドのオーバーライド)
描画のタイミングでこれが呼ばれる模様。
-(void)drawRect:(CGRect)rect
{
// Since we use the CGContextRef a lot, it is convienient for our demonstration classes to do the real work
// inside of a method that passes the context as a parameter, rather than having to query the context
// continuously, or setup that parameter for every subclass.
[self drawInContext:UIGraphicsGetCurrentContext()];
}

今回はここまで

|

« iphone 開発 サンプル「Simple Undo」を読む。 | トップページ | iphone application "BM-drawer" support page »

iphone開発」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1049865/35663783

この記事へのトラックバック一覧です: QuartzDemoを読む 1:

« iphone 開発 サンプル「Simple Undo」を読む。 | トップページ | iphone application "BM-drawer" support page »