Мне нужно убедиться, что при загрузке моего 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).