Исправление ориентации контроллеров просмотра

У меня есть кнопка в моем RootViewController .... когда я нажимаю на эту кнопку, она переходит к другому ViewController. но я хочу, чтобы, когда я нажимаю кнопку, ориентация otherViewController должна быть альбомной, а когда я вернусь с этой страницы (otherViewController), я снова должен получить портретный режим.

Большое спасибо за любую помощь. Пожалуйста, помогите мне, я новичок в Iphone, поэтому не могу справиться с этим.


person user440485    schedule 14.09.2010    source источник


Ответы (4)


Как правило, ориентация должна изменяться с книжной на альбомную (или наоборот) только тогда, когда пользователь поворачивает устройство.

Однако, если вы хотите, чтобы ваш RootViewController всегда отображал свой вид в портретной ориентации, а ваш OtherViewController всегда отображал вид itvs в альбомной ориентации, это достаточно просто.

В вашем RootViewController .h:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

В вашем OtherViewController .h:

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

Хотя это, вероятно, было бы лучше, поскольку это позволяло бы вращать как ландшафт влево, так и вправо:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
person Shaggy Frog    schedule 14.09.2010
comment
Мне очень жаль, но это не дает другой ViewController в альбомной ориентации при нажатии кнопки Buton. - person user440485; 14.09.2010
comment
(1) не используйте теги br (2) вам не нужно размещать три отдельных комментария (3) Установите точку останова в этих функциях. Попадает ли точка останова? - person Shaggy Frog; 14.09.2010

Примечание в iOS 6 shouldAutorotateToInterfaceOrientation: устарело. Вместо этого вы должны использовать supportedInterfaceOrientations и вернуть UIInterfaceOrientationMask.

Так например:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

Вот все параметры UIInterfaceOrientationMask, которые вы можете вернуть:

UIInterfaceOrientationMaskAll
UIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscape
UIInterfaceOrientationMaskLandscapeLeft
UIInterfaceOrientationMaskLandscapeRight
UIInterfaceOrientationMaskPortrait
UIInterfaceOrientationMaskPortraitUpsideDown

Вам также следует принять во внимание preferredInterfaceOrientationForPresentation.

person Oliver Pearmain    schedule 16.04.2013

Я знаю, что это можно сделать только одним способом - модально представить otherViewController.

См. Мой ответ здесь: UIViewController нагрузки повернуты в альбомную ориентацию но поддерживает только портретную ориентацию

person Johan Kool    schedule 14.09.2010

Может, это поможет.

in viewWillAppear вашего нового контроллера представления добавить

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscape]

и в viewWillAppear вашего корневого viewController добавьте

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

Это вызовет предупреждение, но это работает.

person Steve    schedule 14.09.2010
comment
Кроме того, это недокументированный API и причина отказа приложения. - person Johan Kool; 14.09.2010