Storyboardは非常に便利ですが、アプリの起動時にModalで、しかもpresentModalController:animated:NOで呼びたい時に、Storyboardだけではうまく呼ぶことが出来ません。
ios – Perform Segue on ViewDidLoad – Stack Overflow こちらの回答が参考になりました。
方法は、
-(void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (!CPOSData.loginSucced) {
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"CPOSLoginViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:vc animated:animated];
}
}
こんな感じです。storyboardから、ViewControllerを読み込んであげて、そのvcをpresentModalViewControllerで読んであげるという、凄くシンプルですね。ここで、気付いたのが、storyboardでは、幾つかモーダル表示のスタイルを選ぶことが出来て、ページのカールだったり、cross desolve(お互いが交互にフェードイン、フェードアウト)するような感じで、非常に便利な感じになっています。それが、
- [vc setModalPresentationStyle:UIModalPresentationFullScreen];
- [vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
の2つのメソッドで設定出来るんですね。
PresentationStyleには、
typedef enum {
UIModalPresentationFullScreen = 0,
UIModalPresentationPageSheet,
UIModalPresentationFormSheet,
UIModalPresentationCurrentContext,
} UIModalPresentationStyle;
TransitionStyleには、
typedef enum {
UIModalTransitionStyleCoverVertical = 0,
UIModalTransitionStyleFlipHorizontal,
UIModalTransitionStyleCrossDissolve,
UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;
といろいろあるんですね。しかも、iOS3.系以降なので、iOS4系にも使えるのは嬉しいですね。