UIViewКонтроллер ориентации - PullRequest
2 голосов
/ 19 августа 2011

У меня есть экземпляр UIViewController (viewController1), который я хочу заблокировать в ландшафтном режиме, что я могу сделать.При нажатии на кнопку я нажимаю другой UIViewController (viewController2), который поддерживает обе ориентации.Теперь, если пользователь меняет ориентацию viewController2 на Portrait и возвращается к viewController1, viewController1 также меняет ориентацию на PortraitКак мне этого избежать?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 19 августа 2011

Если эти 2 контроллера являются реализацией UIViewController, то оба разных класса друг друга!Вы можете просто реализовать метод shouldAutorotateToInterfaceOrientation, в первую очередь!это должно работать, даже когда вы вернетесь!

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
    return YES;
}
return NO;}
0 голосов
/ 23 ноября 2012

Вы говорите push, поэтому я предполагаю, что оба ViewControllers находятся в NavigationController.Если это так, я должен разочаровать вас, то, что вы хотите, не возможно.Ваши обратные вызовы ротации работают правильно, они реагируют на ротацию, вы не можете форсировать ее.То, что происходит, это правильное поведение.

Лучшее решение - не дать пользователю вернуться назад, когда вы находитесь в ориентации, которую предыдущий ViewController не поддерживает, например, скрыть кнопку возврата.

А пока ясделал свой собственный NavigationController (не наследует от UIViewController, но он может делать то же самое), и я попытался реализовать то, что вы пытаетесь сделать.Перед нажатием или выталкиванием, если представление ViewController, которое должно было быть показано, не поддерживало текущую ориентацию, я преобразовал представление этого ViewController на 90 ° и принудительно установил ориентацию строки состояния в поддерживаемую ориентацию нового ViewController.Как только толчок или щелчок закончится, я сделаю небольшой трюк, чтобы вызвать вращение устройства.Если вы удалите представление rootViewController из окна и повторно добавите его, цепочка респондента будет вынуждена пройти через все обратные вызовы вращения.Когда это произошло, я проверил, было ли преобразовано представление ViewController, и сбросил это преобразование.

В основном это сработало.Но это был грязный код, и он противоречит текущей политике Apple, согласно которой rootViewController должен отвечать за обработку ориентации.Также в iOS6 форсирование ориентации строки состояния гарантированно работает.Так что я бы действительно советовал не делать этого, я тоже удалил это из моего собственного NavigationController.

0 голосов
/ 19 августа 2011

Добавить эти методы в контроллеры представления

  • (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {

    return (interfaceOrientation == UIInterfaceOrientationPortrait);}

То для первого

  • (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {

    вернуть YES);}

То есть второе

- (BOOL) shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation) toInterfaceOrientation {if (UIInterfaceOrientationIsPortrait (toInterfaceOrientation);} вернуть НЕТ;}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...