iphone всегда возвращает UIInterfaceOrientationPortrait - PullRequest
2 голосов
/ 03 мая 2011

Мне нужно убедиться, что при загрузке моего UIViewController он вращается по мере необходимости.

Я реализовал методы shouldAutorotateToInterfaceOrientation, и все они работают нормально, кроме случаев, когда приложение загружается впервые (когда iphone находится в альбомном режиме) или при переходе из UIViewController, который был в портретном режиме interfaceOrientation и [[UIDevice currentDevice] orientation] всегда возвращает портретный режим!

Я читал блоги и даже некоторые вопросы SO, но, похоже, ни один из них не решает основную проблему.

Я использую стандартное приложение UINavigationController. Таким образом, первое представление - это первый помещенный контроллер в стек. Я также попытался спросить у self.navigationController его ориентацию, но безуспешно.

Любая помощь здесь очень ценится.

РЕДАКТИРОВАТЬ : Вот мой код для представленияWillAppear

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:YES animated:NO];

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
    [self setPortraitMode];
else
    [self setLandscapeMode];
}

РЕДАКТИРОВАТЬ 2

Вот как я распечатываю текущий

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
NSLog(@"currentDevice: %d", (int)orientation);
NSLog(@"statusbar: %d", (int)[UIApplication sharedApplication].statusBarOrientation);
NSLog(@"nav controller: %d", (int)self.navigationController.interfaceOrientation);
NSLog(@"interface orientation: %d", (int)self.interfaceOrientation);

Они все распечатывают "1"

но когда я помещаю этот код в метод willRotateToInterfaceOrientation, они выводят правильные значения int (1,2,3 или 4).

Ответы [ 4 ]

1 голос
/ 04 мая 2011

Как насчет проверки ориентации в viewDidAppear: вместо этого?Вы можете использовать «анимированный», чтобы решить, будете ли вы вращаться с анимацией или нет.Вы можете просмотреть, а затем повернуть, но я думаю, что это приемлемый опыт.

РЕДАКТИРОВАТЬ: как продолжение моих комментариев, вот снимок экрана из Xcode 4 для UIInterfaceOrientation:

enter image description here

1 голос
/ 04 мая 2011

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

(приложения iPad можно запускать в любой ориентации экрана, и вы должны предоставить отдельные образы запуска для обеих ориентаций.)

1 голос
/ 03 мая 2011

Вместо использования [[UIDevice currentDevice] ориентация] для проверки ориентации используйте ориентацию строки состояния, чтобы получить точную ориентацию: - [UIApplication sharedApplication] .statusBarOrientation.У меня также была проблема при проверке ориентации currentDevice, она не всегда возвращает точную ориентацию

0 голосов
/ 13 июня 2014

Я работал с поворотами и ориентациями iOS-приложения.Я обнаружил, что self.interfaceOrientation всегда даст вам правильный результат, если вызвать viewDidAppear или после этого.

[UIApplication sharedApplication].statusBarOrientation предпочтительнее при добавлении вида непосредственно к UIWindow.

Надеюсь, это поможет.

...