Метод обратного вызова при автоповороте, 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;
    }
}

Точно так же вы можете проверить ориентацию для портретного режима, лицевой стороной вверх, лицевой стороной вниз, вверх ногами и альбомной ориентацией и альбомной ориентацией вправо.:)

Другие вопросы по тегам