2010-06-18 4 views
6

В какой-то момент в моем приложении я хотел бы временно отключить функцию вращения - эффективно «заблокировать» ориентацию кода, аналогично тому, что переключатель тумблера блокировки делает на iPad в аппаратное обеспечение.Как временно заблокировать ориентацию iPad/iPhone

Я сейчас делаю:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications] 

и когда я до конца, я называю:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 

Хотя все это, кажется, работает, документация API указывает, что всегда должно быть начало, а затем конец - и я делаю это по существу в обратном порядке. Есть ли более подходящий API для обработки «ориентации блокировки»?

ответ

10

Я думаю, что это так же просто, как не реагировать на изменения ориентации с вашего контроллера. Вы можете условно вернуть true или false в зависимости от параметров, которые вы передали, вам не всегда нужно возвращать true.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if (rand()%2 == 0) { // evaluate if I should allow rotate 
     return YES; 
    } else { 
     return NO; 
    } 
} 
+0

Спасибо - отлично работает! – Eric

+0

Это то, что я делаю сейчас, но есть обратный ход: Например, если I ** 0. ** Устройство и контроллер просмотра находятся в портретном режиме. ** 1. ** поверните устройство до (скажем) ландшафта (регулятор просмотра тоже вращается), ** 2. ** блокировка вращения. ** 3. ** поверните устройство к портрету (контроллер просмотра в этом случае не вращается, что хорошо). ** 4. ** затем откройте вращение, после чего UIViewController не обновится до портрета. Я должен повернуть его снова, чтобы получить выше метод под названием :( – nacho4d

+0

В этом случае просто слушайте аксиометр гравитации и отрегулируйте себя соответственно – slf