Автоповорот iPhone только на определенных экранах под контроллером навигации

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

Вопрос

Это всего лишь пример основной проблемы, с которой я столкнулся, поэтому не беспокойтесь, если эта ситуация звучит немного бессмысленно;)

Допустим, у меня есть приложение, которое в основном представляет собой UINavigationController всего на два уровня. Верхний уровень представляет собой таблицу со списком имен файлов изображений, а второй уровень имеет только UIImageView, показывающий изображение для имени файла, к которому вы прикоснулись.

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

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

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

Решение

Проблема в том, что если вы используете автоматическое вращение, весь пользовательский интерфейс (включая, я полагаю, экземпляр UIWindow) поворачивается.

Все, что будет вставлено в контроллер навигации в этот момент, будет выполнено в альбомной ориентации.

Поэтому, когда вы нажимаете на изображение, это именно то, что вы получаете.

Чтобы это сработало, вам нужно:

<Ол>
  • Обработка поворота корневого представления вручную (с помощью преобразования)
  • Отключить просмотр изображения с помощью -PI / 2 используя преобразование.
  • В любом случае, вам нужно выполнить преобразования вручную, чтобы заставить это работать.

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

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

    В iPhone OS 2.x не было хорошего способа сделать это, но в 3.0 они значительно улучшили его.

    В 2.x метод делегата shouldAutorotateToInterfaceOrientation: выполнялся только для изменений в ориентации, поэтому вы получите описанное вами поведение: если его повернуть в другом контроллере вида он останется повернутым во время толчков и толчков, даже если новый контроллер представления не поддерживает вращение в этой ориентации.

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

    Обратите внимание, что это будет работать только для приложений, связанных с (и поэтому требующих) 3.0. Для приложений, связанных с 2.x, он будет эмулировать старое поведение.

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