Автоповорот iPhone только на определенных экранах под контроллером навигации - PullRequest
1 голос
/ 18 июня 2009

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 19 июня 2009

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

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

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

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

0 голосов
/ 18 июня 2009

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

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

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

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

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

В любом случае вам нужно выполнить преобразования вручную, чтобы заставить это работать.

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

...