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

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

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

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

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

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

2 ответа

Решение

Догадаться.

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;
}

Если вы используете контроллер панели вкладок вместо контроллера навигации в качестве корневого контроллера, вам необходимо аналогичным образом создать подкласс 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;
}
Другие вопросы по тегам