Я использую два ViewController'а. MainView и FlipViewController. MainView содержит набор кнопок и элементов управления, а также графический дисплей, а FlipView содержит настройки.
MainView загружает другой XIB в зависимости от ориентации, чтобы облегчить разнообразие кнопок, которые я поддерживаю, и графический экран. Это дает большую гибкость в размещении вещей по-разному. Первоначально проект был создан до того, как в Xcode были добавлены функции StoryBoarding.
Обычный вариант использования: я начинаю в портретном режиме на MainView, а затем нажимаю кнопку, которая поворачивает FlipView в поле зрения. Я делаю что-то в FlipView (настраиваю аспекты программы), а затем фиксирую изменения, которые возвращают меня обратно в MainView. Пока все хорошо.
Проблема возникает, когда я вхожу в FlipView, а затем поворачиваю устройство, чтобы FlipView принял другую ориентацию. Допустим, я поворачиваю Портрет на Ландшафт. Затем вернитесь из FlipView в MainView. На данный момент MainView не знает о вращении, которое выполнил FlipView. Таким образом, он по-прежнему показывает MainView в портретном режиме с портретным XIB.
WillRotateToInterfaceOrientation MainView никогда не вызывается после возврата из FlipViewController. Таким образом, он никогда не узнает об изменении ориентации и, следовательно, сохраняет неправильный XIB для этой ориентации. Вот пример обработчика ориентации в willRotateToInterfaceOrientation...
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
// if portrait, load the portrait XIB for Pad or Phone
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[[NSBundle mainBundle] loadNibNamed:@"MainViewiPad" owner:self options:nil];
}else{
[[NSBundle mainBundle] loadNibNamed:@"MainView" owner:self options:nil];
}
[self viewDidLoad];
intorient = 1;
else.... handle Landscape...
Поэтому я экспериментировал с подпрограммой viewWillAppear, пытаясь найти способы заставить MainView узнать о вращении и выполнить его системным образом. Но пока я не знаю, как заставить систему работать таким образом. Я подозреваю, что мне придется генерировать код, который вызывает перезагрузку правильной ориентации при вызове viewWillAppear. Но это работает неправильно, потому что мне никогда не удается вовремя загрузить изменение, и мне кажется неправильным пытаться перезагрузить новый XIB из сообщения viewWillAppear.
Любая помощь в понимании этого поведения очень ценится.