Как сделать приложение полностью работоспособным для авторотации в iOS 6?

17

В iOS6 shouldAutorotateToInterfaceOrientation устарела. Я попытался использовать supportedInterfaceOrientations и shouldAutorotate , чтобы приложение работало правильно для авторотации, но не удалось.

этот ViewController я не хочу вращать, но он не работает.

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

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

Любые идеи? Спасибо за любую помощь заранее!

    
задан Carina 30.09.2012 в 17:03
источник
  • Является ли контроллер просмотра встроенным в контроллер навигации или контроллер таблеток? –  Felix 30.09.2012 в 17:06
  • встроен в контроллер навигации. @ phix23 –  Carina 30.09.2012 в 17:09

2 ответа

38

Выяснил это.

1) подклассифицированный UINavigationController (верхний элемент управления иерархией будет контролировать ориентацию). сделал его как self.window.rootViewController.

- (BOOL)shouldAutorotate
{
    return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}

2), если вы не хотите, чтобы контроллер просмотра поворачивался

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

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

3), если вы хотите, чтобы он мог поворачивать

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

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

Кстати, в соответствии с вашими потребностями, другой связанный метод:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
     return UIInterfaceOrientationMaskPortrait;
}
    
ответ дан Carina 30.09.2012 в 17:29
источник
  • +1 для ответа на свой вопрос с некоторыми хорошими примерами кода –  Robotic Cat 30.09.2012 в 19:02
  • Я пробовал этот метод, и он работает хорошо. –  Robert 04.10.2012 в 07:38
  • Почему вы переписываете - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation? Он устарел и никогда не звонит –  voromax 08.10.2012 в 16:39
  • Он работает для iOS 5.1 или новее. Если целью развертывания вашего приложения является 6.0. @voromax –  Carina 09.10.2012 в 03:13
  • Извините, iOS5.1 или раньше –  Carina 09.10.2012 в 10:06
Показать остальные комментарии
3

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

Также синтаксис будет другим. Я успешно использовал следующее. Затем я успешно использовал приведенные выше примеры на контроллерах представлений, которые я хотел переопределить. В моем случае я хотел, чтобы основной экран не вращался, но у меня был экран часто задаваемых вопросов с фильмами, который я, естественно, хотел включить в альбомный вид. Отлично! Просто обратите внимание на изменение синтаксиса на self.modalViewController (вы получите предупреждение компилятора, если попытаетесь использовать синтаксис для контроллера навигации.) Надеюсь, это поможет!

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL)shouldAutorotate
{
    return self.modalViewController.shouldAutorotate;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return self.modalViewController.supportedInterfaceOrientations;
}
    
ответ дан Jim Hankins 03.10.2012 в 02:50
источник