iPhone SDK - shouldAutorotateToInterfaceOrientation Вопрос - PullRequest
0 голосов
/ 07 июня 2011

Я пытаюсь запустить некоторый код в приложении для iPhone, когда устройство поворачивается влево или вправо.Ясно, что я могу сделать это, используя shouldAutorotateToInterfaceOrientation, однако я НЕ хочу вращать элементы управления / подпредставления в представлении.Я могу остановить вращение подпредставлений, вернув NO к вышеуказанному методу:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {    
    NSLog(@"Should rotate\n");
    return YES;
}

Когда я делаю это и поворачиваю устройство влево или вправо, событие запускается, как и ожидалось.Моя проблема в том, что когда я поворачиваюсь назад от пейзажа к портрету, событие не запускается.Это должно быть потому, что вращение было остановлено возвратом NO до его поворота на lanscape;поэтому ориентация все еще считается портретной.Однако, если я верну YES, подпредставления будут вращаться.

Кто-нибудь имел дело с этой проблемой? Кто-нибудь знает способ либо: (1) вернуть YES с shouldAutorotateToInterfaceOrientation, сохраняя управление статическим, либо (2) зафиксировать вращение устройства независимо от shouldAutorotateToInterfaceOrientation?

Большое спасибо, Бретт

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Если вам нужно просто следить за поворотами устройства, вы можете сделать это, прослушивая уведомление UIDeviceOrientationDidChangeNotification, а затем получить текущую ориентацию, используя свойство orientation синглтона UIDevice. Вам придется запускать и останавливать эти уведомления, вызывая beginGeneratingDeviceOrientationNotifications и endGeneratingDeviceOrientationNotifications для объекта UIDevice.

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

Хотя цель не ясна, если это для игры, вы должны посмотреть на CoreMotion framework и следовать данным гирометра.

0 голосов
/ 07 июня 2011

shouldAutorotateToInterfaceOrientation не событие. Это просто значит взять UIInterfaceOrientation и вернуть ДА или НЕТ в зависимости от того, поддерживается или нет автоповорот.

Документы Apple показывают, что UIInterfaceOrientation определяется как:

   typedef enum {
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft 
    }UIInterfaceOrientation;
0 голосов
/ 07 июня 2011

Вы можете зарегистрировать событие и запустить его изнутри shouldAutorotateToInterfaceOrientation с необходимой ориентацией, всегда возвращая NO.

Отказ от ответственности: может показаться немного странным, но это даст вам ручное управление интерфейсом при изменении ориентации.

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