Ориентация интерфейса не изменится на альбомную при запуске приложения - PullRequest
0 голосов
/ 25 мая 2011

Я застрял на проблеме, которая сводит меня с ума! У меня есть приложение для iPad, начиная с TabBarViewController. Каждая вкладка имеет свой собственный ViewController и nib-файл.

Чтобы сделать ориентацию интерфейса возможной, я добавил все ориентации в свой info.plist и подклассифицировал свой TabBarController для установки:

        - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return YES;
}

Каждый вид автоматически изменяет размеры и форматируется для отображения правильной ориентации, если я поворачиваю интерфейс. Если я протестирую его в симуляторе, все выглядит хорошо, и я могу вращаться между ориентациями.

Теперь точка, которая сводит меня с ума:

Если я запускаю приложение в портретном режиме, все работает нормально ... но если я запускаю в альбомной ориентации, я получаю сообщение об ошибке, и моя ориентация интерфейса по-прежнему остается портретной, а симулятор находится в ландшафтном режиме !!

Ошибка:

2011-05-24 21:50:15.011 Project[57995:207] Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.

Я проверил ориентацию следующим образом:

    -(void)viewWillAppear:(BOOL)animated{

    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];



    if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) {
        NSLog(@"Orientation: Landscape");
    }
    else{
        NSLog(@"Orientation: Portrait");
    }

}

В журнале написано, что он находится в «альбомном» режиме, если я запускаю в альбомной ориентации, но если я переключаю вкладку на другую, это выглядит ужасно, потому что вместо этого вид отображается в портретном режиме. При переходе обратно к стартовому виду, где я попросил Ориентацию ... в журнале отображается "Портрет" ... но Симулятор по-прежнему Пейзаж!

Я не могу понять, почему Ориентация - это Портрет при старте ... даже если я начну в Пейзаж ...

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Хорошо. Таким образом, в документации сказано, что viewWillAppear: вызывается перед всеми анимациями. И когда ваше приложение запускается, его начальная ориентация Portrait. Основываясь на вашей ориентации, он поворачивается к этой ориентации. Так как он оживляет ориентацию за пределами экрана, он должен вызываться после viewWillAppear: / Поэтому, когда вызывается viewWillAppear:, он все еще находится в Portrait. Я проверял это сам.

0 голосов
/ 25 мая 2011

Я решил проблему!

Просто использовал это в методе viewWillAppear всех моих видов, чтобы он работал при запуске в ландшафтном режиме:

if(([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) || ([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationLandscapeRight)){        
    //Landscape View
}
else{
    //Portrait View
}

У меня отлично работает!

...