2009-06-17 5 views
1

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

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

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

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

+0

Вам нужно, чтобы NavigationBar вращался и отображался на первый взгляд для первого контроллера? – MikZ

ответ

0

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

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

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

Чтобы получить эту работу, вы должны либо:

  1. Handle вращение зрения корневой вручную (с помощью преобразования)
  2. Unrotate вид изображения на -pi/2 с использованием преобразования.

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

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

+0

Это больше не относится к iPhone OS 3.0. См. Мой ответ ниже. – Marco

3

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

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

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

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

+0

Это похоже на то поведение, которое я искал. Я должен буду попробовать это снова, теперь у меня новый SDK. Благодаря! – Cruinh

Смежные вопросы