2014年7月23日水曜日

UIViewControllerをオーバーレイする方法

iPhone、iPod touchの場合、UIViewControllerが2つあって、Aの上にBをオーバーレイしたいんだけど、Bが保持するビューを透明にしても、Bのトランジションが完了すると同時にAは消えてしまうので悩んでました。

結局のところ、こういう使い方はイリーガルなんだと思いますが、いろいろ調べた結果分かった事を覚え書きしておきます。

通常は以下のようなコードを書いて、ビューの管理をcontroller_bへ移行してます。
[controller_a presentViewController:controller_b animated:YES completion:^{}];


トランジション終了後もcontroller_aの管理するビューを消さないようにするには、以下のようにrootViewControllerのmodalPresentationStyleにUIModalPresentationCurrentContextを設定すれば良いとのこと。
UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
bak_rootViewModalPresentationStyle = rootViewController.modalPresentationStyle;  // 戻ってきた時などのために退避しておく
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;

[controller_a presentViewController:controller_b animated:YES completion:^{}];

一見、うまくいって喜んでましたが、画面を回転させた時に、controller_aは回転しないままになるので、ちょっと微妙な感じですね。
ドキュメントを読むと、modalPresentationStyle は、iPadのためのものにも見えるので、ちょっと素直な使い方ではないのかもしれません。

参考

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...