Подтвердить что ты не робот

IOS 6 - Как запустить пользовательский код при изменении ориентации

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

В iOS 5 я использовал свойство willRotateToInterfaceOrientation, чтобы поймать изменения и изменить мои переменные, но это устарело в iOS6. Мой существующий код выглядит следующим образом:

    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)      
        rect = screenRect;

    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
        rect.size = CGSizeMake( screenRect.size.height, screenRect.size.width );
    GameEngine *engine = [GameEngine sharedEngine];
    if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
        engine.orientation = -1;
    } else {
        engine.orientation = 1;
    }
}

Я понимаю, что замена - это метод viewWillLayoutSubviews в классе UIViewController. Я создаю эту игру в cocos2d 2.1, и в демонстрационном проекте не существует класса UIViewController, поэтому я не понимаю, как его включить и как должен выглядеть код, чтобы сделать эту работу.

4b9b3361

Ответ 1

Слушайте изменения ориентации устройства:

[[NSNotificationCenter defaultCenter] 
       addObserver:self
          selector:@selector(deviceOrientationDidChangeNotification:) 
              name:UIDeviceOrientationDidChangeNotification 
            object:nil];

При уведомлении получить ориентацию устройства из UIDevice:

- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    switch (orientation)
    {
        // etc... 
    }
}