проблема изменения ориентации iPad - PullRequest
7 голосов
/ 09 июля 2010

Приложение для моего iPhone отображает странное поведение при запуске на iPad в отношении поддержки изменения ориентации.

Приложение запускается с контроллером представления (для аргумента называют его представлением A) и навигациейcontroller, и shouldAutorotateToInterfaceOrientation возвращает YES только для портрета.На контроллер навигации я помещаю контроллер вида (вид B), который также возвращает YES только для портрета.Затем я помещаю другой контроллер вида (вид C) на контроллер навигации, который поддерживает все повороты и настраивает элементы на экране в зависимости от ориентации, на которую нужно повернуть.

Когда это выполняется на симуляторе iPhone и устройстве,если вы поворачиваетесь в горизонтальный вид C, а затем нажимаете кнопку «Назад», чтобы вернуться в режим B, он делает все правильно и переводит вид B обратно в портретный режим.(В симуляторе он даже автоматически поворачивает симулятор в портретное положение.)

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я делаю ту же самую последовательность событий на симуляторе и устройстве iPad, вид B, которыйПоявляется, не поворачивается обратно в портрет, и контроллер Nav по-прежнему показывает информацию для представления C. Затем я нажимаю на кнопку «Назад», и вид остается прежним, но контроллер Nav отображается нормально для представления B (но все по-прежнему в альбомной ориентацииРежим).Затем, если я снова нажму кнопку «Назад», вид A появится под элементами навигационной панели вида B, и, наконец, снова нажатие вернет меня к представлению A с элементами навигационной панели A.

Если перейти к просмотру B наiPad и начать вращаться, долженAutorotateToInterfaceOrientation срабатывает с NO, пока я не достигну портретного режима, а затем все возвращается в нормальное состояние.

Приложение создается с последней выпущенной версией iPhone SDK и имеет настройки сборкиследующим образом: базовый SDK iPhone Simulator 4.0, семейство целевых устройств iPhone, развертывание iPhone OS Цель iPhone OS 3.1.3.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 13 июля 2010

Apple заявляет:

Случай: Все контроллеры дочерних представлений в вашем UITabBarController или UINavigationController не согласовывают общий набор ориентации.

Ответ: Чтобы убедиться, что все ваши дочерние контроллеры представлений вращаются правильно, вы должны реализовать mustAutorotateToInterfaceOrientation для каждого контроллера представления, представляющего каждую вкладку или уровень навигации. Каждый должен договориться об одной и той же ориентации, чтобы это произошло. То есть все они должны возвращать YES для одинаковых позиций ориентации.

http://developer.apple.com/iphone/library/qa/qa2010/qa1688.html

Вы можете установить ориентацию устройства в навигационном контроллере, а не в отдельных видах. Затем вы можете проверить, какое представление находится в стеке, и вращаться в зависимости от результата. Таким образом, навигационный контроллер также обрабатывает всю ориентацию.

0 голосов
/ 16 июля 2010

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

- (void)viewDidLoad {  
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    }
    [UIView commitAnimations];
}

и

- (void)viewDidLoad {
    if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(-(M_PI / 2));
        self.view.bounds = CGRectMake(0, 0, 320, 480);;
    }
    [UIView commitAnimations];
}

В зависимости от ориентации устройства вам потребуется изменить часть кода.

...