Случилось мне недавно делать приложение для iOS, которое работает в портретной ориентации экрана и только одно вью (которое отображалось модально) нужно было отображать только в ландшафтной ориентации экрана. Что ж, решение для iOS 5.х довольно простое: в методе
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation модального окна просто прописываем нужный разворот устройства
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Для iOS 6.x все оказалось немного сложнее:
1. В классе вью контроллера модального окна определяем обработчики методов
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
- (BOOL)shouldAutorotate
{
return YES;
}
2. Сразу после вызова показа модального окна устанавливаем положение статус бара:
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
3. Перед тем, как убрать модальное окно, возвращаем статус бар в нужное положение:
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
Как обычно
пример на github-е.