2012-10-01 5 views
12

Sto creando un gioco che consente al dispositivo di essere in orientamento orizzontale o sinistro o orizzontale e il lettore può modificare l'orientamento mentre è in pausa. Quando lo fanno ho bisogno di cambiare il modo in cui il gioco interpreta l'accelerometro in base all'orientamento.iOS 6 - Come eseguire codice personalizzato quando cambia l'orientamento

In iOS 5 ho utilizzato willRotateToInterfaceOrientation per rilevare le modifiche e modificare le variabili, ma questo è deprecato in iOS6. Il mio codice esistente è simile al seguente:

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

Capisco che la sostituzione è il metodo viewWillLayoutSubviews nella classe UIViewController. Sto costruendo questo gioco in cocos2d 2.1 e non sembra che ci sia una classe UIViewController nel progetto demo, quindi non sono chiaro su come incorporarlo e come dovrebbe apparire il codice per farlo funzionare.

risposta

36

Ascoltare per le modifiche orientamento del dispositivo:

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

Quando notificato, ottenere l'orientamento del dispositivo da UIDevice:

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

+1 corretta opzione per il compito affidato. Basta fare attenzione poiché si riceverà anche una notifica sui cambiamenti di orientamento a faccia in su rispetto a -down e si occuperà della differenza tra "UIInterfaceOrientation ..." e "UIDeviceOrientation ..." – Till

+0

@Darren che era esattamente ciò di cui avevo bisogno. Grazie! –

+0

@Till - a faccia in su contro verso il basso intendi quando si orienta in verticale o verticale capovolto? O qualcos'altro? Inoltre, ho assunto DeviceOrientation e InterfaceOrientation sono quasi sempre gli stessi, tranne in circostanze particolari come più viste, o se InterfaceOrientation è stato impostato programmaticamente per non corrispondere all'orientamento del dispositivo. O ci sono altri casi da considerare che potrebbero causare un problema? –