Ориентация ориентации GLKViewController

У меня есть макет, где экран разделен на 2 части: UIView сверху и GLKViewController внизу. Проблема в том, что при изменении ориентации GLKViewController часть GLKViewController поворачивается и постепенно растягивается до окончания анимации, после чего будет вырисовываться новый нерастянутый кадр.

Есть ли способ отключить автоматическую анимацию вращения для GLKViewController , поэтому я мог бы анимировать ее вручную, манипулируя матрицей проектирования модели?

3 Solutions collect form web for “Ориентация ориентации GLKViewController”

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

Ваше представление рисуется во время анимации вращения, поэтому все, что вам нужно сделать, это убедиться, что оно рисует себя таким образом, который соответствует его среднему размеру во время анимации. Анимация вращения обрабатывается Core Animation, поэтому вы используете свой метод presentationLayer для доступа к переходному состоянию во время анимации. Например:

 CALayer *presentationLayer = [self.view.layer presentationLayer]; CGSize layerSize = presentationLayer.bounds.size; float aspect = fabsf(layerSize.width / layerSize.height); GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective( GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f); 

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

Чтобы увидеть ход анимации и убедитесь, что она работает правильно, используйте команду «Toggle Slow Animations» в iOS Simulator.

(Кредит при условии: код из этого ответа .)

GLKViewController – это подкласс UIViewController . UIViewController имеет метод willAnimateRotationToInterfaceOrientation:duration: вы можете переопределить его и настроить анимацию представления.

Более подробную информацию вы можете найти в документации: Справочник по классу UIViewController в разделе « Responding to View Rotation Events ».

В зависимости от того, что вы хотите достичь, вы бы сделали разные вещи, чтобы отключить автоматическое вращение.

Если вам вообще не нужна ротация, отключите его на уровне проекта. В Xcode используйте навигатор, чтобы выбрать проект (верхний элемент списка файлов) и перейдите в раздел «Общие» целевого приложения. Для ориентации устройств отключайте все, кроме «Портрет»:

Список ориентации устройства

Если вам нужно отключить его для некоторых «экранов», а не для других, вам необходимо отключить вращение на уровне UIViewController . UIViewController был разработан для UIViewController всей области экрана, поэтому, если вы используете GLKViewController который управляет GLKView который частично покрывает экран, он, скорее всего, находится внутри другого контроллера представления. Вам нужно подклассифицировать родительский контроллер представления и добавить следующие методы:

 // From iOS 6 - (BOOL)shouldAutorotate { return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } // iOS 5 - (BOOL)shouldRotateToOrientation:(UIInterfaceOrientation)orientation { return NO; } 

Это предотвратит поворот родительского контроллера.

Наконец, если вам нужно разрешить поворот некоторых элементов на экране, но не других, то вам нужно будет определить, какой метод использовать:

  • Позвольте экрану вращаться, поворачивая назад те элементы, которые вы хотите оставаться статическими. Я бы не рекомендовал его.
  • Заблокируйте экран от вращения, как указано выше, и вручную поверните те элементы, которые вы хотите повернуть, установив их свойство transform . Это то, за что я бы пошел.
  • Можно ли добавить представление к нескольким другим представлениям безопасно, если да, то что делает removeFromSuperView: в этом случае?
  • Создайте ярлыки на главном экране iOS для Chrome для iOS
  • iOS GCM код ошибки 501
  • Диалоговое окно «Facebook Share» на iOS: кнопка «Опубликовать» всегда выделена серым цветом
  • Контроллер просмотра без укладки
  • Что происходит с данными в приложении iOS при обновлении новой версии приложения и обновлении новой версии iOS
  • Что заставляет игры iOS добавлять в игровые подключения пользователей?
  • Управление памятью в приложении iOS на основе карты
  • Лучший способ распространения приложения iOS без использования магазина приложений
  • iOS. Как расширить область реагирования на события прокрутки UIScrollView?
  • Получить последнего работодателя, используя API-интерфейс Facebook Graph
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.