Странный пейзаж UITabBarController Запуск приложения - PullRequest
0 голосов
/ 17 июля 2009

Мое приложение довольно простое, но у меня возникают некоторые проблемы при запуске. Я установил в Info.plist ландшафтный дизайн, но он, кажется, игнорирует порядок. Фактически, когда приложение загружается, симулятор имеет ландшафт, но затем он возвращается в портретном режиме.

Это иерархия представлений и контроллеров:

  • MainViewController (расширяет UITabBarController только для переопределения shouldAutorotateToInterfaceOrientation :)
    • Три расширенных контроллера UITableViewController в качестве вкладок (также те, для которых правильно настроен shouldAutorotateToInterfaceOrientation).

Если принудительно установить ориентацию устройства на Пейзаж с помощью:

[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationLandscapeRight];

Затем на мгновение симулятор мигает в портретном режиме, а затем он выходит в ландшафт. Проблема в том, что таким образом запускается анимация автоповорота, что я не могу использовать. Я просто хочу фиксированное ландшафтное приложение.

Есть какие-нибудь подсказки? Я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 24 марта 2010
0 голосов
/ 17 июля 2009

Попробуйте следующее. Не уверен, почему это не работает для вас

1) установить ключ UIInterfaceOrientation
в UIInterfaceOrientationLandscapeRight в вашем файле .plist

2) переопределить ваш метод UITabBarController shouldAutorotateToInterfaceOrientation (); далее код работает только с табуляцией ноль и единица и только с одним контроллером: если у вас есть контроллер навигации и вы хотите управлять различными контроллерами, которые могут находиться в стеке, вы должны соответственно изменить код

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    BOOL tabZeroController = [[[self.viewControllers objectAtIndex:0] visibleViewController] isKindOfClass:[YourTabZeroTableViewController class]];

    BOOL tabOneController = [[[self.viewControllers objectAtIndex:1] visibleViewController] isKindOfClass:[YourTabOneTableViewController class]];


    if(self.selectedIndex == 0 && tabZeroController)
        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);

    if(self.selectedIndex == 1 && tabOneController)
        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);

    return NO;

}

2) настройка

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

в методе applicationDidFinishLaunching () вашего делегата требуется только для симулятора, а не на устройстве

3) добавьте в свои контроллеры следующее shouldAutorotateToInterfaceOrientation (метод)

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

4) запустите приложение на своем устройстве и убедитесь, что оно работает правильно, с помощью пункта меню «Оборудование» «Повернуть влево» и «Повернуть вправо». Вы должны увидеть дисплей в ландшафтном режиме.

...