Определить блокировку ориентации устройства iOS - PullRequest
9 голосов
/ 23 марта 2011

Как программно проверить, заблокирована ли ориентация устройства в iOS? Я ничего не вижу в UIDevice. Я знаю, что это должно быть прозрачным для приложения. Но я бы хотел изменить способ отображения контента, если ориентация заблокирована (как это делает приложение Youtube; оно привязано не к книжной, а к альбомной ориентации). Это должно быть возможно.

Ответы [ 3 ]

8 голосов
/ 21 июня 2012

Вы можете использовать класс UIAccelerometer, чтобы детально определить ориентацию телефона. Если вектор ускорения входит в состояние, где его самый большой абсолютный компонент находится на оси X, это горизонтальная ориентация. Теоретически это можно использовать для определения блокировки ориентации: если в течение нескольких секунд после этого контроллер НЕ получает вызов shouldRotateToInterfaceOrientation, а свойство [[UIDevice currentDevice] orientation] не находится в альбомной ориентации, вы можете смело предположить, что у пользователя заблокирована ориентация.

Это сложно и имеет задержку, потому что shouldRotateToInterfaceOrientation будет вызываться задолго после того, как фактический вектор фактически вошел в ландшафтную область. Сама идея - хакерская, и вам, вероятно, следует пересмотреть, почему вам действительно нужно представлять ландшафтные виды, когда пользователь предпочитает не показывать их.

7 голосов
/ 23 марта 2011

Нет способа определить, заблокирована ли ориентация или нет.Приложение YouTube не блокируется в альбомной ориентации, оно просто отображает фильм в альбомной ориентации, но когда вы поворачиваете iPhone, фильм также вращается (если нет блокировки ориентации).

Блокировка ориентации IOW обрабатывается системой,прозрачно для вашего приложения.

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

Обновление для комментария:

.h

BOOL rotationEnabled;

.m

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
  return rotationEnabled || ( toInterfaceOrientation == UIInterfaceOrientationLandscapeRight );
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  rotationEnabled = YES;
}
0 голосов
/ 23 марта 2011

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

Я думаю, что этим занимается и YouTube.

...