Метод обратного вызова при автоповороте, iOS и iPad
Я работаю над игрой для iPhone, мне было любопытно узнать, есть ли функция обратного вызова, которая вызывается, когда устройство вызывает автоматический поворот игры, чтобы я мог изменить элементы HUD.
Или я запускаю бесконечный цикл, который проверяет, вращалось ли приложение в другом потоке? Проблема в том, что я не думаю, что это эффективный способ. У кого-нибудь есть хорошее решение для этого.
2 ответа
Да, пока устройство не заблокировано, вы можете зарегистрироваться для прослушивания.
UIDeviceOrientationDidChangeNotification
который можно увидеть здесь http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html
Если вы хотите преодолеть возможность блокировки ориентации устройства, то вам необходимо вручную контролировать акселерометр устройства.
В игре, где ориентация важна, рекомендуется ручной мониторинг, так как первый метод имеет небольшую задержку.
Все, что вам нужно сделать, это:
В вашем didfinishlaunching
напиши это
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:)
name:UIDeviceOrientationDidChangeNotification object:nil];
а затем скопируйте следующий метод обратного вызова
- (void) didRotate:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIDeviceOrientationLandscapeLeft)
{
NSLog(@"Landscape Left!");
self.isLandscapeLeft=1;
}else if(orientation == UIDeviceOrientationLandscapeRight){
NSLog(@"Landscape Right!");
self.isLandscapeLeft=0;
}
}
Точно так же вы можете проверить ориентацию для портретного режима, лицевой стороной вверх, лицевой стороной вниз, вверх ногами и альбомной ориентацией и альбомной ориентацией вправо.:)