私のアプリには、 A、B、C、Dの4 つのタブがあります。によってUIViewController管理されていUITabBarControllerます。アプリは回転をサポートしているため、各ビュー コントローラーは に戻りYESますshouldAutorotateToInterfaceOrientation。
スプリングとストラットを使用して、ほとんどの回転は iOS によって自動的に行われます。ただし、タブAもさらに配置する必要があり、その VC のwillRotateToInterfaceOrientation方法で行われます。
タブAの VCが選択され、画面が回転されると、その VC はwillRotateToInterfaceOrientationメッセージ (から iOS によって伝搬されたUITabBarController) を受信し、結果の回転は正しくなります。
ただし、選択したタブがBで画面が回転している場合、AのwillRotateToInterfaceOrientationは呼び出されません。理にかなっています。しかし、次にタブAを選択すると、そのスプリングとストラットを適用した結果のみが得られ、その による後処理は行われませんwillRotateToInterfaceOrientation。
これにしばらく苦労した後、オンラインで解決策を見つけることができなかった後、次のことを思いつきました。私はサブクラスUITabBarController化し、その中で、どれが であるかにかかわらず、willRotateToInterfaceOrientationすべての VC を呼び出します。willRotateToInterfaceOrientationselectedViewController
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (self.viewControllers != nil) {
for (UIViewController *v in self.viewControllers)
[v willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
}
それは機能しますが、ハックのように見えます。私の質問は、私が正しいことをしていたかどうかです。willRotateToInterfaceOrientation画面の回転後に初めて表示する前に、常に VC を呼び出すように iOS に指示する方法はありますか?