2011年10月9日日曜日

presentModalViewControllerを使う

UIViewの上に、一時的に別の画面(UIView)を表示させたい時、おおまかに二通りの方法が考えられると思います。
  • 表示中の UIView に addSubview メソッドで新しい UIView を載せる。
  • UIViewController の presentModalViewController:animated: メソッドを使って、新しいUIViewController と入れ替える。
どちらを使うのが良いのかは、UIをどうするかで判断すると良いと思います。

下層の画面と UI を一時的にOFFにして、新しい画面を表示させたい場合は、presentModalViewController:animated: メソッドを使用すると便利です。
animated を YES とした場合のトランジション中にも、下層の UI の反応が無くなっているようなので、面倒な管理を必要としません。(かなり重要)
また、UIViewController を生成する時に、インスタンスを autorelease プールに入れておけば、dismissModalViewControllerAnimated: メソッドで元の画面に戻った時に、自動でインスタンスが解放されます。

実装としてはこんな感じになります。
// 新しいViewをpresentModalViewControllerで表示
// autorelease しておくと便利!
OtherViewController *controller = [[[OtherViewController alloc] initWithNibName:@"OtherViewController" bundle:[NSBundle mainBundle]] autorelease];
[rootViewController presentModalViewController:controller animated:YES];

ユーザーの操作などで、元の画面に戻るには以下のようにします。
// modalViewを破棄して、元の画面に戻る
[rootViewController dismissModalViewControllerAnimated:YES];
cocos2d を使ってゲームなどを作っている場合でも、ゲームの操作説明には UIWebView などの UIKit を使って表示させたい事は多いと思います。そういう時に、presentModalViewController:animated: メソッドの利用は便利だと思いました。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...