Ограничение видов ландшафта в UITabBarController, содержащем UINavigationController - PullRequest
2 голосов
/ 06 мая 2010

У меня есть приложение панели вкладок, которое содержит навигационные представления в 2 своих вкладках. Мне бы хотелось, чтобы 1 представление в 1 навигационном контроллере позволяло использовать альбомную ориентацию, но из-за ограничений навигационной панели в панели вкладок мне теперь нужно разрешить горизонтальную ориентацию для каждого отдельного представления в моем приложении, чтобы сообщения наклона передавались в мое приложение, которое я не хочу.

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

У кого-нибудь есть идеи или опыт, которыми они хотят поделиться? Каков наилучший подход здесь? (Теперь я не хочу проектировать альбомный вид для каждого вида только для того, чтобы я мог отображать портретный и альбомный вид для 1 вида)

1 Ответ

2 голосов
/ 06 мая 2010

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

в UIViewController вида, который вы хотите иметь возможность вращать добавить обработчик уведомлений для UIDeviceOrientationDidChangeNotification

-(void)viewDidLoad {


[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotateFromInterfaceOrientation)
                                             name:@"UIDeviceOrientationDidChangeNotification" object:nil];

}

тогда, конечно, вам нужно реализовать свой didRotateFromInterfaceOrientation метод.

в этом методе вы можете получить текущую ориентацию, используя

 UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

то, что я сделал затем, было оценка представления, которое я хочу отобразить, основываясь на ориентации

switch (orientation) {
    case UIDeviceOrientationLandscapeLeft:
        NSLog(@"UIDeviceOrientationLandscapeLeft");
        [self presentModalViewController:LandscapeView animated:YES];

        break;
    case UIDeviceOrientationLandscapeRight:
        NSLog(@"UIDeviceOrientationLandscapeRight");

        [self presentModalViewController:LandscapeView animated:YES];

        break;
    case UIDeviceOrientationPortraitUpsideDown:
        NSLog(@"UIDeviceOrientationPortraitUpsideDown");
        [LandScapeview dismissModalViewControllerAnimated:YES];

        break;
    case UIDeviceOrientationPortrait:
        NSLog(@"UIDeviceOrientationPortrait");
        [LandscapeView dismissModalViewControllerAnimated:YES];
        break;

    case UIDeviceOrientationFaceUp:
        NSLog(@"UIDeviceOrientationFaceUp");

        break;

    case UIDeviceOrientationFaceDown:
        NSLog(@"UIDeviceOrientationFaceDown");
        break;

    default:
        break;
    }
}

Я надеюсь, что смогу немного помочь.

...