Дочернее представление не поворачивается от пейзажа к портрету и наоборот - PullRequest
1 голос
/ 20 марта 2012

Я делаю приложение для iPad.У меня есть видоискатель, который должен оставаться в пейзаже, это работает просто отлично.

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

В этом виде я нажимаю в сторону другого вида, этот дочерний вид должен поворачиваться в соответствующее вращение (пейзаж или портрет)всякий раз, когда пользователь наклоняет свой ipad.в этом дочернем виде я использую этот код, чтобы это произошло, но это не работает.Это прилипает к ландшафту.

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

1 Ответ

1 голос
/ 20 марта 2012

Чтобы контроллер представления поддерживал ротацию, все контроллеры представления в его иерархии должны поддерживать ротацию.

От Реагирование на изменения ориентации документация:

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

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

Кроме того, вам не следует использовать несколько контроллеров представления для управления одним экраном.

Из Руководства по программированию контроллера представления документация (выделение моя):

Отношение один к одному между контроллером представления и представлениями в его иерархии представлений:Ключевое рассмотрение проекта. Вы не должны использовать несколько контроллеров представления контента для управления различными частями одной и той же иерархии представления. Аналогично, вам не следует использовать один объект контроллера представления контента для управления стоимостью нескольких экранов.

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

Вы можете отслеживать изменения ориентации, прослушивая уведомление UIDeviceOrientationDidChangeNotification.Пример кода:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self selector:@selector(yourSelector:)
    name:UIDeviceOrientationDidChangeNotification object:nil];

Обновление

Если под "push" вы имеете в виду выдвинуть контроллер представления на контроллер представления навигации, тогда, пожалуйста, не обращайте внимания на вторую часть моего ответа.

Если это так, вы должны убедиться, что вы переопределили метод shouldAutorotateToInterfaceOrientation: вашего контроллера навигации, чтобы он возвращал YES, а также ваш контроллер вида для поддержки обработки поворота.

...