Предупреждение о видах в портрете, iPad в ландшафте и не может вращаться к чему-либо, кроме «другого» ландшафта (180 градусов)

StackOverflow https://stackoverflow.com/questions/3816566

Вопрос

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

В моем приложении iPad, который поддерживает все ориентации, если приложение загружено в ландшафт, странные вещи случаются:

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

Экран просмотра предупреждения ниже. Странно, странно. Любые идеи, почему это может происходить? Это происходит только при нагрузке в ландшафт - загрузка в портрете, а затем вращается к ландшафту, работает просто хорошо.Landtrait!

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

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

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

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

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

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

Это было полезно?

Решение

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

Смотрите выше пост для получения подробной информации о решении.

Другие советы

Используйте UialertController вместо UialertView. У меня та же проблема и сейчас исправлена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top