iphone - проблема ротации подпредставлений - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть корень UIView и UIView A в качестве его подпредставления

Я не разрешаю вращать root, поэтому я пишу в корневой класс

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

но я позволяю повернуть подпредставление root (A), поэтому в классе A я пишу

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

Но похоже, что и root, и его подпредставление A не могут вращаться.

Как мне разрешить вращение A, но не root?

спасибо

1 Ответ

3 голосов
/ 01 декабря 2010

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

Существует два возможных подхода к решению вашей проблемы, в зависимости от того, что именно вы хотите сделать:

  • если не вращающийся вид находится за всем, что вращается, вы можете удалить его из контроллера представления и добавить его в главное окно приложения за контроллером представления при viewWillAppear: и снова удалить его при viewDidDisappear:
  • если не вращающиеся и вращающиеся представления необходимо смешать более сложным способом, вы можете перехватить willAnimateRotationToInterfaceOrientation: duration: и установить подходящее обратное преобразование для невращающегося представления.Так что его повернули, а затем развернули.Вам нужно быть немного хитрым, чтобы получить правильное поведение между определенными поворотами на 180 градусов из-за того, как работает CoreAnimation.

UIApplication предоставляет средство для получения окна ключа в виде объекта UIWindow,что, вероятно, то, что вы хотели бы для первой идеи.UIWindow наследует от UIView, поэтому применяются все стандартные механизмы добавления и упорядочения подпредставлений.

Для последнего вы захотите установить преобразование в соответствующем представлении.Получить преобразование из суперпредставления, получить обратное и установить его на виде.См. CGAffineTransform для получения дополнительной информации.Проблема CoreAnimation, о которой упоминалось, заключается в том, что переход от одного поворота к 180 °, отличающемуся по кратчайшему маршруту (как примет CoreAnimation), дает два возможных решения - одно по часовой стрелке и одно против часовой стрелки.На практике вам нужно добавить невидимое смещение к преобразованию вида в портретном режиме, чтобы CoreAnimation выбрал правильный, если вы поворачиваете между портретом и портретом вверх ногами.Если вы используете iPhone, вполне допустимо не поддерживать UIInterfaceOrientationPortraitUpsideDown на этом устройстве (большинство приложений Apple этого не делают), поэтому на самом деле, вероятно, проще просто не поддерживать эту ориентацию.

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