Apple の NIB は回転をネイティブにサポートしていないため、同じビューに 2 つの異なる NIB (向きごとに 1 つずつ) を使用しようとしています。
私は次のことを試してみましたが、動作しますが、いくつかのサブビュー (Apple の OpenGL / GLKit ビューなど) が壊れます。
最初のローテーションのみが中断されます。その後のすべてのローテーションは期待どおりに機能します。したがって、Apple の「viewWill/Did」呼び出しのスタックには、ここで見逃している微妙な点があると思います。問題は、それに関する実際のドキュメントを見つけることができなかったことです.Appleドキュメント内のあちらこちらで、発生した呼び出しの「一部」と、いつ/なぜ.
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if( UIInterfaceOrientationIsLandscape( toInterfaceOrientation) )
{
[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])] owner:self options:nil];
[self viewDidAppear:FALSE];
[self viewWillDisappear:FALSE];
[self viewDidReload];
[self viewWillAppear:FALSE];
[self viewDidAppear:FALSE];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-landscape"] forBarMetrics:UIBarMetricsDefault];
}
else
{
[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", NSStringFromClass([self class])] owner:self options:nil];
[self viewDidAppear:FALSE];
[self viewWillDisappear:FALSE];
[self viewDidReload];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-portrait"] forBarMetrics:UIBarMetricsDefault];
[self viewWillAppear:FALSE];
[self viewDidAppear:FALSE];
}
}