私のアプリには、 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 を呼び出します。willRotateToInterfaceOrientation
selectedViewController
- (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 に指示する方法はありますか?