iOS Rotate View Only One View Controller View

У меня есть два контроллера представления в одном проекте. Однако я хочу, чтобы один из контроллеров представления автоматически поворачивался, а другой - нет.

Если я установлю настройки главного проекта, как показано ниже: введите здесь описание изображения

Затем все контроллеры представления автоматически поворачиваются, независимо от следующего кода в контроллере представления, который я НЕ хочу использовать для автоматического поворота:

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

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

введите здесь описание изображения

Как я должен интегрировать настройки главного проекта (файл plist) с настройками контроллеров представления, чтобы один контроллер представления автоматически поворачивался, а другой - нет?


person The Kraken    schedule 18.08.2012    source источник
comment
Ознакомьтесь с этим ответом.   -  person mijokaliger    schedule 18.08.2012
comment
Как насчет ваших отношений между двумя ViewController? Например. Push-отношение или модальное отношение.   -  person bitmapdata.com    schedule 19.08.2012


Ответы (2)


 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

был обесценен в iOS 6, поэтому, если это то, что работает в вашем проекте, поэтому он не работает. Что вам нужно сделать, это реализовать:

- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

Первый сообщит контроллеру, какую ориентацию ему разрешено использовать, а второй сообщит ему, какую ориентацию использовать в первую очередь. Обратите внимание, что первый метод вызывается только в том случае, если метод shouldAutorotate: возвращает YES.

Вот константы, которые вы можете использовать для поддерживаемых интерфейсов ориентации:

UIInterfaceOrientationMaskPortrait
UIInterfaceOrientationMaskLandscapeLeft
UIInterfaceOrientationMaskLandscapeRight
UIInterfaceOrientationMaskPortraitUpsideDown
UIInterfaceOrientationMaskLandscape
UIInterfaceOrientationMaskAll
UIInterfaceOrientationMaskAllButUpsideDown

Обратите внимание, что они работают только на iOS 6.0.

person Christine    schedule 05.12.2012

Предположим, я использую tabbarController и iOS‹6.0, попробуйте использовать следующий код для решения вашей проблемы:

//In First View Controller

//BOOL activeStatus;

-(void)viewWillAppear:(BOOL)animated
{
 activeStatus=YES;
}


-(void)viewWillDisappear:(BOOL)animated
{
 activeStatus=NO;
}

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

return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

//In Second View Controller

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{

 return YES;
}
person SURESH SANKE    schedule 14.03.2013