アプリの特定のページで向きを変更すると問題が発生します。このshouldAutoRotate
関数はどのページでも起動しません。このコードが正しいかどうか誰かが教えてくれることを期待して、掘り下げました。
ウィンドウ、homepageController という名前のナビゲーション コントローラー、および mainController という名前のタブ バー コントローラーがあります。アプリは次のように動作します。ユーザーがログインできるように、homepageController を提示します。正しいログイン キーが入力されたら、ウィンドウからホームページ コントローラ ビューを削除し、mainController ビューを追加します。ここにコードがあります
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.6];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:appDel.homePageController.view.superview cache:NO];
[appDel.homePageController.view removeFromSuperview];
[UIView commitAnimations];
[appDel.window addSubview:appDel.mainController.view];
[appDel.mainController setSelectedIndex:0];
[appDel.window bringSubviewToFront:appDel.mainController.view];
タブバーの最初のページに移動し、ブレークポイントをオンにして回転させようとしましたshouldAutoRotate
が、起動しません。
もう一度掘り下げてみたところ、shouldAutoRotate
homepageController の .m ファイル内のメソッドが、向きを変更するたびにトリガーされることがわかりました。私は自分の xib ファイルを見て、これが私が持っているものです。
私のhomepageControllerはrootViewControllerであり、mainControllerのタブからタブに切り替えるときに、このコードを使用していることがわかりました。
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
UINavigationController *nav = (UINavigationController *) viewController;
[nav popToRootViewControllerAnimated:NO];
}
したがって、私のhomepageControllerがrootViewControllerであることを確認すると、shouldAutoRotate
常にそこで呼び出されます。
これに対するより良い解決策があるかどうか疑問に思っています。私はこれを正しく行っているとはまったく思わないので、どんなガイダンスも素晴らしいでしょう。
ありがとうございました