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.
+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
@Darren, który był dokładnie tym, czego potrzebowałem. Dzięki! –
@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? –