Обновление: Решено.См. Исправление внизу.
В моем приложении для iPad, которое поддерживает все ориентации, если приложение загружено в альбомной ориентации, происходят странные вещи:
- Виды предупреждений отображаются в портретном режиме, даже еслиотдых в альбомной ориентации
- Поворот iPad из альбомной в портретную ориентацию не вызывает поворота (и при этом не запускается ни один из методов стиля shouldAutorotate).
- Поворот iPad на 180 градусов (к «другим»альбомная ориентация ») запускает поворот, и после этого iPad ведет себя как обычно (то есть при повороте корректно поворачивается в портретную и альбомную ориентацию).
Экран просмотра предупреждений ниже.Странно, странно.Есть идеи, почему это может происходить?Это происходит только при загрузке в альбомной ориентации - загрузка в портретной ориентации, а затем поворот в альбомную ориентацию работает просто отлично.
Решение: Эта проблема возникла из-за того, что я добавлял UIViewController (модально) поверх контроллера основного представления, как только приложение заканчивало загрузку (более конкретно, в приложении).viewDidAppear:
метод).
iOS отправляет несколько (4) shouldAutorotateToInterfaceOrientation:
вызовов текущему / главному контроллеру после запуска, чтобы выяснить, какие ориентации в настоящее время поддерживаются.Когда я добавил другой VC так скоро, это произошло в середине вышеупомянутых звонков.Таким образом, я получил только один или два звонка (для «портрета», потому что он начинается с портрета).
В контроллере основного вида была оставлена поддержка по умолчанию "NO" для альбомной ориентации, но недавно добавленный контроллер вида (который также запрашивается об ориентациях) теперь с радостью отвечает да.
Если бы я удалил другой VC (который находится в альбомной ориентации), я бы понял, что мой контроллер основного вида застрял в портретной ориентации.Итак, у меня был портретный вид, поверх которого был пейзажный вид.Предупреждения и тому подобное учитывали ориентацию первого, отсюда и катастрофические результаты, приведенные выше.
Кроме того, если я попытался повернуть в портрет, я не смог, потому что контроллер основного вида уже был в портретном.Поворот в альбомную ориентацию также был невозможен, поскольку другой контроллер представления уже находится в альбомной ориентации.Только когда я выполнял вращение «ландшафт, но этот другой», оба контроллера представления согласились, что вращение необходимо, и, таким образом, устройство вращается.
Исправление в моем случае состояло в том, чтобы просто поместить создание другогоКонтроллер с небольшой задержкой.использование performSelector:withObject:afterDelay.
- 0, похоже, сработало, но я просто поставил его на 1, чтобы быть уверенным.Это выглядит немного странно, с появлением основного vc, а затем другого vc, но это лучше, чем выше.