Приложение на основе навигации: только один ландшафтный UIVIewController

Все еще плохо знакомы с целью C и iOS, я сталкиваюсь с новой проблемой.

Это довольно просто, мне нужно было только один UIViewController в моем приложении, чтобы быть в ландшафтном режиме, поэтому я создал свое приложение следующим образом:

Один пользовательский UINAvigationController: MyNavController, установленный как "Является начальным контроллером представления" в моей MainStoryBoard.storyboard. Затем я добавляю в этот navController...:

- (NSUInteger)supportedInterfaceOrientations
{

    return [[self topViewController] supportedInterfaceOrientations];
}

... чтобы иметь возможность контролировать, какие дочерние элементы UIVIewController пользовательского навигационного контроллера могут быть в горизонтальной ориентации.

В ландшафтном UIVIewController я установил:

- (NSUInteger)supportedInterfaceOrientations
{
        return UIInterfaceOrientationMaskLandscapeLeft ;
        return UIInterfaceOrientationMaskPortrait; 
}

так что я могу получить этот контроллер пейзаж или нет. В этом ландшафтном контроллере в моем nib-файле (landscape.xib) я установил режим приветствия в режиме UIPortrait, а за этим видом у меня был ландшафтный вид. Поэтому, когда пользователь нажимает на контроллер, он видит, что ему нужно повернуть экран своего iPhone. Я слушаю изменение ориентации, используя:

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged)  name:UIDeviceOrientationDidChangeNotification  object:nil];

В ориентации изменен я скрываю портретный вид и затем мы можем видеть пейзажный вид.

Это работает, но когда вы вращаете быстро, это работает очень плохо, иногда вид скрыт, иногда нет. Итак, есть мои вопросы:

  • В приложении на основе навигации, как лучше всего настроить только один контроллер?
  • Я использую:

    [self.navigationController pushNavigationController: landscapeController];

Есть ли другой способ не выдвигать ladnscapeController, чтобы он больше не зависел от navController?

Спасибо всем, любая помощь будет приветствоваться.

1 ответ

Решение

Используйте этот код, прежде чем нажать следующий контроллер

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;

используйте этот код, когда поп-контроллер

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationIsPortrait(UIInterfaceOrientationMaskPortrait);
Другие вопросы по тегам