Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2010-03-11

[iPhone]iPhoneのプロジェクトに新しいviewとcontrollerを追加する手順

先日リリースしたアプリはiPhone SDKのプロジェクト新規作成で選択できる「Utility Application」テンプレートをそのまま利用したのだが、 今作っているRPGでは少なくとも5画面ほど遷移させる必要がある。

Interface Bulderをいじりながら「Utility Application」ベースのプロジェクトに新しいviewとcontrollerを追加することができたので、その手順をメモしておく(手探りで確立した手順なので正しいかどうか自身なし)。

  1. 「Utility Application」で新規作成したプロジェクトからInterface Bulderを開いておく
  2. Interface Bulder => File => New にてCocoa TouchのViewを選択
  3. File => Save を選んでFooという名前で保存。このとき作成中のプロジェクトに追加するチェックを入れておく
  4. FooというWindowのFile's Ownerをダブルクリックし、Class欄に「FooViewController」と入力する
  5. 次にFile's Ownerの下にあるViewをクリックしてClass欄に「FooView」と入力する
  6. File's Ownerをクリックし、File => Write Class Files... を実行してFooViewController.hとFooViewController.mを書き出す
  7. 次にFile's Ownerの下にあるFoo Viewをクリックし、File => Write Class Files... を実行してFooView.hとFooView.mを書き出す
  8. FlipsideViewのソースの中身を書き出したファイルにコピーする
  9. 作成した.hと.c内の「Flipside」をすべて「Foo」に置換する
  10. File's Ownerをクリックして「Foo View Controller Connections」ウィンドウ (左から2番目のタブ)内のOutlets => viewとFoo Viewを接続する

ここまででビルドは通るはず。

次に作成したFooViewContorollerを呼び出してFooViewを表示するようにする。

MainViewController.hの次の部分を修正する。

#import "FlipsideViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
}

以下のように書き換える(動いたけど文法がわからないのでこれでいいのか自信なし)。

#import "FlipsideViewController.h"
#import "FooViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, FooViewControllerDelegate> {
}

次にMainViewController.mを書き換えてしまう(もしくは新しいアクション用のメソッドを定義する)。 FilpsideをFooに書き換える。

- (IBAction)showIndo {
	FooViewController *controller = [[FooViewController alloc] initWithNibName:@"FooView" bundle:nil];
	controller.delegate = self;
	
	controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
	[self presentModalViewController:controller animated:YES];
	
	[controller release];
}

ちなみにUIModalTransitionStyleFlipHorizontalの部分をUIModalTransitionStyleCoverVertical(下から出てくる) やUIModalTransitionStyleCrossDissolve(半透明で徐々に切り替わる)に変えると切り替わるときのアニメーション方法を変えることができる。

あとflipsideViewControllerDidFinishの引数の方をidとしておく(idにするよりもっといい方法があるかもしれない)。

- (void)flipsideViewControllerDidFinish:(id)controller {
	self dismissModalViewControllerAnimated:YES];
}

これでinfoアイコンをクリックするとFooViewが表示されるようになる。