2014-08-28 9 views
5

Pracuję na systemie iOS 7, aby była kompatybilna z ios 8 (beta 5). W tej aplikacji UIViewController (vc1) przedstawia kolejną UIViewController (vc2). vc1 obsługuje orientacje pionową i poziomą; vc2 obsługuje tylko orientację pionową. Po wyświetleniu vc2 prosi się o vc1: shouldAutorotateToInterfaceOrientation: i zwraca ona YES.UIViewController metody przekazywania urządzeń obrotowych urządzenia nie są wywoływane w iOS8

W iOS8 (Beta 5) willRotateToInterfaceOrientation: i didRotateFromInterfaceOrientation: nie są wywoływane, jak również nowa metoda API iOS 8 API viewWillTransitionToSize. Ale działa to dobrze w iOS7.

Wiem, że i didRotateFromInterfaceOrientation są przestarzałe w systemie iOS 8, ale nawet metody delegatów iOS 8 nie są wywoływane. Za każdym razem, gdy uruchomiono vc2 z vc1, zawsze wyświetla obciążenia w trybie pionowym, mimo że wspomniałem o obsługiwanej orientacji interfejsu w położeniu poziomym.

Jakieś pomysły ... czy to błąd w iOS8?

+0

Możesz zajrzeć do tego http://stackoverflow.com/questions/25238620/ios-8-rotation-methods-deprecation-backwards-compatibility – rahulinaction

+0

Przejdź przez ten link http://stackoverflow.com/ pytania/25935006/ios8-interface-rotation-methods-not-called –

Odpowiedz

2

Cóż, nie wymyśliłem twojego problemu najlepiej, ale jak tylko będę miał kilka linii, które działają dobrze z rotacją w iOS 8.1, przedstawię je Tobie. Są one po prostu pobierane i trochę edytowane z Apple API Reference.

Po prostu umieszczam to w każdym VC i po prostu edytuję kod w razie potrzeby. Na przykład mam aplikację, która ma początkowy kontroler widoku w pionie, a następnie zmiany VC (przejście jest zrobione) do LandscapeVC z różnymi funkcjami. To jest metoda widoku pionowego prowadząca do obrotu w widoku poziomym.

bool isShowingLandscapeView = false; 

- (void)awakeFromNib 
{ 
    isShowingLandscapeView = NO; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(orientationChanged:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 
} 

- (void)orientationChanged:(NSNotification *)notification 
{ 
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && 
     !isShowingLandscapeView) 
    { 
     isShowingLandscapeView = YES; 
     [self performSegueWithIdentifier:@"toLandscape" sender:self]; 
    } 

Mam nadzieję, że udało mi się to łatwo zrozumieć. Nie wahaj się poprawić mojej odpowiedzi, wszyscy uczymy się w tym życiu!

Powiązane problemy