cocos2dとcocoaインタフェースのハイブリッドを実装する際、つい便利なaddChildViewControllerを使ってしまいがちですが、使うとアプリがバックグラウンドに移行するタイミングで終了してしまいます。
昔の方法になりますが、addChildViewController:を使わずにメンバ変数にviewControllerを保持しておき、rootViewController.viewに対してaddSubView:を実行するようにします。
[self.window addSubview:rootViewController.view];
self.window.rootViewController = rootViewController;
@implementation UINavigationController (Rotation)
- (NSUInteger)supportedInterfaceOrientations{
return [self.viewControllers.lastObject supportedInterfaceOrientations];
}
- (BOOL)shouldAutorotate{
return [self.viewControllers.lastObject shouldAutorotate];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];
}
@end
上の例では、回転制御を現在表示中の子画面に渡しています。
こうする事で画面ごとに回転制御を行なう事が可能です。
アプリ内で回転制御を細かく分ける必要がない場合、UINavigationControllerから直接値を返すようにした方が楽かもしれません。