Только один контроллер навигации (и вспомогательные контроллеры представления) должен быть в альбомной ориентации.

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

Спасибо за любую помощь! Бен


person Homeoftheben    schedule 18.09.2012    source источник


Ответы (2)


Вы должны создать подкласс -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation в каждом отдельном контроллере представления вашего приложения и разрешить это только для двух контроллеров представления. Но для панели вкладок вам также необходимо установить для нее значение ДА, когда вы представляете эти контроллеры представления (для этого вам, вероятно, потребуется подклассифицировать панель вкладок) и НЕТ в противном случае

person nicolasthenoz    schedule 18.09.2012
comment
Спасибо за ответ! Извините, я новичок в этом. Когда вы говорите «подкласс» этой строки кода - означает ли это в файле .h или .m контроллера просмотра? Или это что-то совсем другое? Спасибо еще раз за помощь. - person Homeoftheben; 19.09.2012
comment
Лучшим термином является переопределение этого метода. Добавьте его в свой .m файл. Он заменит существующий одноименный метод, унаследованный от суперкласса (в данном случае UIViewController). - person danh; 19.09.2012
comment
Думаю, я понял - спасибо! Я прочитал еще немного - подходит ли это тем, кого я хочу делать пейзажем? - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); } - person Homeoftheben; 19.09.2012
comment
Да, вы должны переопределить его в каждом контроллере просмотра, который вы хотите вращать, а также в их родительских контроллерах просмотра, поскольку он будет вызываться только в том случае, если родительский элемент разрешает вращение. Вот почему я думаю, что вам нужно создать подкласс UITabBarController, чтобы разрешить вращение только при представлении правильного VC. - person nicolasthenoz; 19.09.2012

Прежде всего, не создавайте подклассы UINavigationController!

Только для LandScape Orientation используйте это в классе ViewController, который должен быть в альбомной ориентации:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

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

Надеюсь, это поможет вам :)!

person Razvan    schedule 19.09.2012
comment
Спасибо за ответ! Я пробовал, но вроде ничего не помогает. Виды, которые я поместил в него, остаются в портретном режиме, как и те, что без него. - person Homeoftheben; 19.09.2012
comment
вы подклассифицировали свой UINavigationController? Должно работать, в моем проекте работает очень хорошо. - person Razvan; 19.09.2012
comment
Я не сделал - UINav переходит к UIViewController (также без подклассов). У него есть кнопка, которая нажимает на UIViewController, который является подклассом и имеет код сверху. Собираюсь попробовать новый проект с нуля. - person Homeoftheben; 19.09.2012
comment
Чтобы добавить еще пару деталей, я делаю это потому, что загружаю видео в webkit в представлении. Я бы хотел, чтобы на нем можно было играть в альбомной ориентации, а не только в портретной. Все остальное в приложении отлично работает в портретной ориентации - только этот вебкит (видео). - person Homeoftheben; 19.09.2012