Принудительный портретный режим
Хорошо, поскольку никто не ответил на мой предыдущий вопрос, я пришел к выводу, что не может быть легкого способа сделать это. Но я настроен оптимистично. Вот моя проблема:
В моем приложении я переключаюсь с ViewControllerOne на ViewControllerTwo с помощью обычной кнопки UIB. ViewControllerOne всегда находится в ландшафтном режиме. Предполагается, что ViewControllerTwo всегда находится в портретном режиме. Однако когда я нажимаю кнопку в моем альбомном режиме ViewControllerOne, ViewControllerTwo также находится в альбомном режиме, хотя я хочу, чтобы он переключался в портретный режим независимо от того, как пользователь поворачивает устройство при нажатии кнопки.
Я добавил следующий код в мой AppDelegate:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
NSUInteger orientations = UIInterfaceOrientationMaskAll;
if (self.window.rootViewController) {
UIViewController* presented = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presented supportedInterfaceOrientations];
}
return orientations;
}
И я добавил это в свой ViewController, который должен быть только в портретном режиме:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
-(void)viewWillAppear:(BOOL)animated
{
UIApplication* application = [UIApplication sharedApplication];
application.statusBarOrientation = UIInterfaceOrientationPortrait;
}
Есть ли способ заставить viewController перейти в портретный режим, даже если предыдущий вид был альбомным? Может быть, я мог бы создать собственный переход, который заставлял бы представление находиться в портретном режиме при нажатии кнопки? Какое будет лучшее / официальное решение здесь?
2 ответа
Проверьте вопрос Как работать с различными ориентациями в iOS 6. См. Ответ там для примера проекта именно того, что вам нужно.
По сути, вам нужно встроить пользовательский контроллер навигации в ваш viewcontroller (тот, который вы хотите вращать). Добавьте следующий метод в этот пользовательский контроллер навигации (он предназначен для альбомной ориентации, но вы можете заменить его на портретный)
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}
и добавьте в свой контроллер просмотра, который должен вращаться:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
Убедитесь, что в вашем проекте включены книжная, альбомная и альбомная ориентация. Затем, если вы хотите заблокировать некоторые ориентации для определенного вида:
– application:supportedInterfaceOrientationsForWindow:
Исходя из моего понимания вопроса, я предполагаю, что вы хотите, чтобы второй контроллер вида был портретным, а первый контроллер вида - горизонтальным.
Для второго view controller добавьте этот метод:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
Для первого контроллера просмотра:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscape);
}