Ответ 1
Как я добавлял свой viewController
.
Я заменил этот код строки:
[window addSubview:viewController.view];
по этой строке:
[window setRootViewController:viewController];
В iOS 5 мое приложение использовало метод для изменения моей ориентации:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
В iOS 6 Я думаю, что я должен это делать, но он ничего не делает! Мое приложение вращается не так, как я хочу.
- (BOOL) shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
Как я добавлял свой viewController
.
Я заменил этот код строки:
[window addSubview:viewController.view];
по этой строке:
[window setRootViewController:viewController];
Когда устройство меняет ориентацию, в iOS 6 система запрашивает приложение, какую ориентацию он поддерживает. Приложение вернет ряд ориентировок, которые он принимает.
Как приложение определяет ориентацию?
-(NSUInteger)application:supportedInterfaceOrientationsForWindow:
. Это эффективно отменяет настройку info.plist, эта реализация является необязательной. По умолчанию iPad-приложения ориентируются во всех направлениях и iPhone во всех, кроме с ног на голову.UINavigationController
или UIViewController
... и т.д., тогда он указывает, как быть представленным, и если он хочет авторотировать. Эти UIViewControllers
могут использовать методы shouldAutorotate:
и supportedInterfaceOrientations
, чтобы сообщить делегату приложения, как его представить.Вы должны убедиться, что вы установили контроллер корневого представления вашего окна.
Также, если вы представляете какие-либо другие контроллеры представлений в полноэкранном режиме, такие как контроллер модального представления, это тот, который отвечает за определение изменений ориентации или нет.
Для меня решение работало, дело было немного, потому что у меня был UINavigationController
.
Мое дело было в том, что мне нужно все окно "Портрет", кроме одного. Мне пришлось включить все ориентации ландшафта и портрета в цели (в противном случае он падает с единственным видом ландшафта).
Итак, в этом случае:
UINavigationController
,UINavigationController
.Если вы используете UINavigationController, он отправляет сообщение supportedInterfaceOrientations:
самому UINavigationController, а не контроллеру верхнего уровня (т.е. то, что вы на самом деле хотите сделать).
Вместо того, чтобы подзагонять UINavigationController, чтобы исправить это, вы можете просто добавить категорию в UINavigationController.
Я создал новую переменную в моем singleton: canRotate
, и я установил ее в YES, когда я хочу, чтобы viewcontroller поддерживал некоторую ориентацию.
В appDelegate я добавил следующее:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if([[SharedData sharedInstance] canRotate])
{
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
}
return UIInterfaceOrientationMaskPortrait;
}
в моем случае это работает. У меня есть настраиваемая вкладка, и UINavigationviewControllers добавляются как подпрограммы в rootViewController.
Я знаю, что это звучит довольно элементарно, но я искал свой мозг, чтобы выяснить проблемы с ориентацией во время тестирования на моем iPhone. У меня был режим автоматической автоматической блокировки в режиме портрета, поэтому ничего, что я изменил программным путем, считал, что это должно быть устранение неполадок шаг номер 1!