Ориентация ориентации 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 . Это то, за что я бы пошел.
  • в исполняемом файле отсутствует требуемая архитектура armv6
  • Добавить UIImage прямо в FBSDKShareLinkContent с Swift?
  • как вычислить угол между двумя линиями пути на карте google с использованием lat-long координат
  • Почему я не могу получить доступ к библиотеке фотографий с помощью UIImagePickerController
  • Служба GCM не отправляет сообщение от клиента IOS
  • Не понимаю, как NSClassFromString можно использовать для условного вызова
  • анимация макета iOS игнорирует длительность при запуске GMSMapView перетаскивания
  • thumbnailLink не возвращается для anyfile с помощью API-интерфейсов Google Диска iOS
  • FacebookSDK (4.1.x) Пользовательский пользовательский интерфейс пользователя - Swift (1.2)
  • Используйте Audio Unit I / O для создания звука на лету?
  • Получить путевые точки между двумя точками
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.