Оповещения в портретной ориентации, iPad в альбомной ориентации и невозможность поворота на что-либо, кроме «другого» пейзажа (180 градусов) - PullRequest
2 голосов
/ 28 сентября 2010

Обновление: Решено.См. Исправление внизу.

В моем приложении для iPad, которое поддерживает все ориентации, если приложение загружено в альбомной ориентации, происходят странные вещи:

  1. Виды предупреждений отображаются в портретном режиме, даже еслиотдых в альбомной ориентации
  2. Поворот iPad из альбомной в портретную ориентацию не вызывает поворота (и при этом не запускается ни один из методов стиля shouldAutorotate).
  3. Поворот iPad на 180 градусов (к «другим»альбомная ориентация ») запускает поворот, и после этого iPad ведет себя как обычно (то есть при повороте корректно поворачивается в портретную и альбомную ориентацию).

Экран просмотра предупреждений ниже.Странно, странно.Есть идеи, почему это может происходить?Это происходит только при загрузке в альбомной ориентации - загрузка в портретной ориентации, а затем поворот в альбомную ориентацию работает просто отлично.Landtrait!

Решение: Эта проблема возникла из-за того, что я добавлял UIViewController (модально) поверх контроллера основного представления, как только приложение заканчивало загрузку (более конкретно, в приложении).viewDidAppear: метод).

iOS отправляет несколько (4) shouldAutorotateToInterfaceOrientation: вызовов текущему / главному контроллеру после запуска, чтобы выяснить, какие ориентации в настоящее время поддерживаются.Когда я добавил другой VC так скоро, это произошло в середине вышеупомянутых звонков.Таким образом, я получил только один или два звонка (для «портрета», потому что он начинается с портрета).

В контроллере основного вида была оставлена ​​поддержка по умолчанию "NO" для альбомной ориентации, но недавно добавленный контроллер вида (который также запрашивается об ориентациях) теперь с радостью отвечает да.

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

Кроме того, если я попытался повернуть в портрет, я не смог, потому что контроллер основного вида уже был в портретном.Поворот в альбомную ориентацию также был невозможен, поскольку другой контроллер представления уже находится в альбомной ориентации.Только когда я выполнял вращение «ландшафт, но этот другой», оба контроллера представления согласились, что вращение необходимо, и, таким образом, устройство вращается.

Исправление в моем случае состояло в том, чтобы просто поместить создание другогоКонтроллер с небольшой задержкой.использование performSelector:withObject:afterDelay. - 0, похоже, сработало, но я просто поставил его на 1, чтобы быть уверенным.Это выглядит немного странно, с появлением основного vc, а затем другого vc, но это лучше, чем выше.

Ответы [ 2 ]

0 голосов
/ 23 июня 2015

Используйте UIAlertController вместо UIAlertview. У меня та же проблема, и теперь она устранена.

0 голосов
/ 19 октября 2010

Эта проблема возникла из-за того, что я добавлял UIViewController (модально) поверх контроллера основного представления, как только приложение заканчивало загрузку (более конкретно, в viewDidAppear: метод приложения).

Подробнее о решении см. Выше.

...