27 апреля 2013 г.

Смена ориентации экрана в модальном окне iOS 5/6

Случилось мне недавно делать приложение для 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-е.

3 комментария:

  1. Еще интереснее когда этот модальный у тебя с навигейшн контроллером. Приходится извращаться еще сильнее, потому что с какой-то стати навигейшн не пробрасывает вызовы этих методов...

    ОтветитьУдалить
  2. Pilot34
    Как будто нет проблем, в модельное окно добавил еще вью контролер который пушится в навигейшин модального окна, в примере (или я не так понял).

    ОтветитьУдалить
  3. Добрый день!

    Вопрос такой ,как изменить ориентацию приложение при нажатие на UIButton?

    То есть нажимаю кнопку , и ориентация поворачивается как в программе YouTube!!!

    Важно именно в ios 6.0

    ОтветитьУдалить