Мое универсальное приложение представляет собой один полноэкранный режим.Нажатие кнопки переворачивает, чтобы открыть страницу настроек:
- (void) showSettings
{
FlipsideViewController * flipsideVC = [FlipsideViewController alloc];
NSString * settingsNib;
if ( isIPad() )
settingsNib = isCurrentlyPortrait() ? @"settings_iPad_portrait" : @"settings_iPad_landscape";
else
settingsNib = @"settings_iPhone";
[flipsideVC initWithNibName: settingsNib
bundle: nil ];
flipsideVC.delegatePointingToMainVC = self;
flipsideVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController: flipsideVC
animated: YES ];
[flipsideVC release];
}
, и страница настроек вызывает метод делегата: я воссоздаю основной вид в свете измененных настроек и переворачиваюсь назад.
- (void) settingsDidQuit:(FlipsideViewController *) flipsideVC
{
[self createOrRecreateWheelView];
[self dismissModalViewControllerAnimated: YES];
}
Но что, если пользователь поворачивает iPad на странице настроек?Apple постановляет, что мое приложение должно справиться с этим.Но как это сделать?я могу динамически загрузить новый XIB для страницы настроек?
Я не вижу способа сделать это, поэтому моя попытка решить эту проблему - перехватить поворот в представлении настроек, ...
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation
{
[self.delegatePointingToMainVC settingsOrientationChanged];
}
... и перезвонить наконтроллер основного вида, который распускает контроллер представления настроек и воссоздает его в свете текущей ориентации.
- (void) settingsOrientationChanged
{
[self dismissModalViewControllerAnimated: YES];
[self showSettings];
}
Тут сразу возникает тривиальная проблема - didRotateFromInterfaceOrientation запускается автоматически при загрузке страницы настроек.Я могу предотвратить это, установив логическое значение false в init и изменив таким образом:
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation
{
if (initialized)
[self.delegatePointingToMainVC settingsOrientationChanged];
initialized = true;
}
Проблема этого подхода заключается в том, что я перехожу на страницу настроек, поворачиваю устройство, и оно на мгновение показывает правильные настройки.страницу, прежде чем вернуться к моему основному виду.
Я думаю, что здесь есть проблема с многопоточностью.Но, возможно, весь мой подход неверен.Может кто-нибудь предложить лучшее решение?