2012-10-01 18 views
12

Estoy creando un juego que permite que el dispositivo esté en orientación horizontal o vertical, y el reproductor puede cambiar la orientación mientras está en pausa. Cuando lo hagan, necesito cambiar la forma en que el juego interpreta el acelerómetro en función de la orientación.iOS 6 - Cómo ejecutar código personalizado cuando cambia la orientación

En iOS 5 usé willRotateToInterfaceOrientation para detectar cambios y cambiar mis variables, pero eso está obsoleto en iOS6. Mi código existente se ve así:

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; 
    } 
} 

entiendo que la sustitución es el método viewWillLayoutSubviews en la clase UIViewController. Estoy construyendo este juego en Cocos2d 2.1 y no parece haber una clase UIViewController en el proyecto de demostración, así que no tengo claro cómo incorporarlo y cómo debe verse el código para que esto funcione.

Respuesta

36

escuchar los cambios de orientación de dispositivos:

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

cuando se le notifique, obtener la orientación del dispositivo de UIDevice:

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

+1 opción correcta para la tarea dada. Solo ten cuidado ya que también recibirás una notificación sobre los cambios de orientación bocabajo y hacia abajo y considerar la diferencia entre 'UIInterfaceOrientation ...' y 'UIDeviceOrientation ...' – Till

+0

@Darren que era exactamente lo que necesitaba. ¡Gracias! –

+0

@Till: ¿por boca arriba o por abajo te refieres cuando se orienta hacia el retrato o el retrato al revés? ¿O algo mas? Además, asumí que DeviceOrientation y InterfaceOrientation son casi siempre los mismos, excepto en circunstancias especiales, como vistas múltiples, o si la InterfaceOrientation se configuró programáticamente para que no coincida con la orientación del dispositivo. ¿O hay otras instancias para tener en cuenta que podrían causar un problema? –

Cuestiones relacionadas