iOS 6: cómo ejecutar un código personalizado cuando cambia la orientación
xcode cocos2d-iphone (1)
Escuche los cambios de orientación del dispositivo:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(deviceOrientationDidChangeNotification:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
Cuando se le notifique, obtenga la orientación del dispositivo desde UIDevice:
- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
switch (orientation)
{
// etc...
}
}
Estoy creando un juego que permite que el dispositivo esté en orientación horizontal izquierda o horizontal, y el jugador 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.
En iOS 5 utilicé willrotateToInterfaceOrientation para detectar cambios y cambiar mis variables, pero eso está obsoleto en iOS6. Mi código actual 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 el reemplazo 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.