Экран iPhone вращается случайным образом? - PullRequest
0 голосов
/ 14 марта 2010

Я использую TabBar Controller в качестве корневого контроллера. Он имеет 4 вкладки, и каждый из его ViewControllers имеет

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
        return YES;
}

, а также сам tabBarController. Но когда я поворачиваю устройство (реальное или симулятор), экран поворачивается наугад! Если он не включится, когда я открою приложение, у него будет такое же поведение, пока я не выйду из приложения. Я попытался добавить 4 viewControllers один за другим в IB, чтобы увидеть, был ли один проблемным, но я получил ту же проблему. Он всегда поворачивается, когда нет никаких вкладок!

Пожалуйста, скажите мне, если у вас есть идеи. Спасибо!

Ответы [ 4 ]

1 голос
/ 14 марта 2010

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

Виды не вращаются автоматически. Обычно вам приходится управлять размещением подпредставления программно во всех, кроме самых простых представлений.

Если у вас нет специального кода ориентации, вы, вероятно, видите, что виды пытаются нарисовать портретное представление в рамке ландшафта или наоборот. Если вы установили autoresize subviews, ваши подпредставления будут казаться разбросанными по экрану, казалось бы, в случайном порядке. Чем больше вы меняете ориентацию, тем более случайным становится размещение.

Для сложных видов я люблю создавать отдельные пары viewController / view для каждой ориентации. Затем я помещаю взгляды в навигационный контроллер. При изменении ориентации каждый контроллер вида будет выдвигать или вставлять соответствующий контроллер вида для приходящей ориентации в / из стека. Для пользователя это выглядит так, будто одно представление изящно перерисовывается. (Это особенно полезно, если у вас есть нестандартные элементы пользовательского интерфейса, которые нужно поворачивать вручную с помощью преобразований)

0 голосов
/ 14 апреля 2010

Я обнаружил, что если вы установите выбранную вкладку программно, tabViewController будет вращаться хаотично.

0 голосов
/ 14 марта 2010

На самом деле, я просто хочу, чтобы мой первый контроллер представления вкладок вращался. Поэтому я поместил этот код в мою пользовательскую вкладку BarController:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
        if (self.selectedIndex == 0) {
            return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
        }else {
            return toInterfaceOrientation == UIInterfaceOrientationPortrait;
        }
}

но у меня была такая же проблема. Я использую пользовательский код ориентации для моего первого контроллера представления вкладок при повороте в альбомную ориентацию. Вызывается с помощью следующей функции в моей пользовательской вкладке Barcontroller:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
        //rotation to Portrait
        lastOrientation = toInterfaceOrientation;
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
        [self.selectedViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    }
    else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
        if (!UIInterfaceOrientationIsLandscape(lastOrientation)) {
            //rotation to Landscape
            [self.selectedViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
        }
        lastOrientation = toInterfaceOrientation;
    }
}
0 голосов
/ 14 марта 2010

Вы должны создать подкласс UITabBarController и реализовать shouldAutorotateToInterfaceOrientation:

...