2012-10-01 16 views
12

Tworzę grę, która pozwala na orientację urządzenia w orientacji poziomej w lewo lub w poziomie, a gracz może zmienić orientację, gdy jest wstrzymana. Kiedy to robię, muszę zmienić sposób interpretacji przyspieszeniomierza w oparciu o orientację.iOS 6 - Jak uruchomić kod niestandardowy po zmianie orientacji

W iOS 5 użyłem WillRotateToInterfaceOrientation, aby przechwytywać zmiany i zmieniać zmienne, ale jest to przestarzałe w iOS6. Moje istniejący kod wygląda następująco:

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

Rozumiem, że wymiana jest metoda viewWillLayoutSubviews w klasie UIViewController. Buduję tę grę w cocos2d 2.1 i nie wydaje się, że w projekcie demonstracyjnym jest klasa UIViewController, więc nie jestem pewien, jak ją włączyć i jak powinien wyglądać kod, aby to działało.

Odpowiedz

36

Posłuchaj zmiany orientacji urządzenia:

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

Kiedy powiadomiony, uzyskać orientację urządzenia z UIDevice:

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

+1 odpowiednia opcja dla danego zadania. Po prostu bądź ostrożny, ponieważ otrzymasz również powiadomienia o zmianach orientacji w kierunku do-down i zauważysz różnicę między "UInterfaceOrientation ..." i "UIDeviceOrientation ..." – Till

+0

@Darren, który był dokładnie tym, czego potrzebowałem. Dzięki! –

+0

@Till - przez face-up versus down masz na myśli, kiedy orientuje się portret lub portret do góry nogami? Albo coś innego? Zakładam również, że DeviceOrientation i InterfaceOrientation są prawie zawsze takie same, z wyjątkiem szczególnych okoliczności, takich jak wiele widoków lub jeśli interfejs InterfaceOrientation został ustawiony programowo, aby nie pasował do orientacji urządzenia. A może są inne przypadki, które mogą spowodować problem? –

Powiązane problemy