Ipad ориентация проблема с модальным видом - PullRequest
1 голос
/ 01 октября 2010

У меня проблема с вращением модального вида. Я создаю основной вид в портретном режиме, затем я создаю модальный вид. Все работает отлично: я могу вращать модальный вид и все ориентации поддерживаются. Если я создаю основной вид в портретном режиме , то поворачиваюсь в альбомной ориентации, и после этого я создаю свой модальный вид ... модальный режим находится в портретном режиме, а не в горизонтальном, как должно быть.

В случае основного представления и модального представления оба атрибуты shouldAutorotateToInterfaceOrientation должны возвращать ДА.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 07 сентября 2012

Это может произойти, если контроллер представления представляется после того, как iOS поставит в очередь событие rotate, но до обработки события rotate.Исходя из наблюдений, я думаю, что события поворота специфичны для представляемых в настоящее время контроллеров представления.

Это полезный способ думать об этом:

  1. Событие поворота ставится в очередь iOSдля контроллера вида сверху: A.
  2. Ваш код представляет контроллер вида, B.
  3. Событие вращения отменено, но оно касается только контроллера вида A.

К счастью, это действительно легко исправить.Просто предположите, что в очереди событий есть событие поворота, и убедитесь, что ваше представление действительно представлено после его.Вы делаете это, ставя в очередь представление своего нового контроллера представления, а не представляя это непосредственно.Блоки, поставленные в очередь в главной очереди, будут выполняться после любых событий, уже поставленных в очередь (например, события поворота), но за до пользователь получает возможность взаимодействовать с вашим пользовательским интерфейсом.

Изменение:

[self performSegueWithIdentifier: @"firstRun" sender: self];

Кому:

dispatch_async(dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier: @"firstRun" sender: self];
});

После этого вы получите следующее поведение:

  1. Событие поворота помещается в очередь iOS дляконтроллер вида сверху, A.
  2. Ваш код планирует блок, который будет представлять новый контроллер вида.
  3. Событие rotate исключено, но оно касается только контроллера вида A.
  4. Новый контроллер вида B представлен вашим блоком.Он получает новую ориентацию.
0 голосов
/ 16 октября 2012

У той же проблемы, наконец, исправлена ​​задержка модального режима на секунду, чтобы «родительский» контроллер представления мог получить правильную ориентацию.

[self performSelector:@selector(presentLogin) withObject:nil afterDelay:1.0]

presentLogin выглядит так:

- (void) presentLogin {
LoginVC *loginVC = [[LoginVC alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginViewController];
nav.modalPresentationStyle =UIModalPresentationFormSheet;
[self presentViewController:nav animated:YES completion:NULL]; 
}
0 голосов
/ 30 января 2011

У меня была такая же проблема.Наконец-то я обошел его, отобразив модальное представление из моего контроллера основного вида (а не из контроллеров представления одного из подпредставлений).

...