Как сделать приложение полностью работоспособным для авторотации в 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
источник

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
источник
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
источник