2014-08-28 9 views
5

aufgerufen Ich habe eine iOS 7 App arbeiten, um es kompatibel für iOS 8 (Beta 5) zu machen. In dieser Anmeldung zeigt UIViewController (vc1) eine weitere UIViewController (vc2). vc1 unterstützt sowohl Hoch- als auch Querformat; vc2 unterstützt nur Hochformatausrichtung. Wenn vc2 angezeigt wird, fragt es vc1: shouldAutorotateToInterfaceOrientation:, und das gibt YES zurück.UIViewController Geräte Rotation Delegate Methoden werden nicht in iOS8

In iOS8 (Beta 5) werden willRotateToInterfaceOrientation: und didRotateFromInterfaceOrientation: nicht aufgerufen, ebenso wie die neue iOS 8 API-Methode viewWillTransitionToSize. Aber das funktioniert in iOS7 gut.

Ich weiß willAnimateRotationToInterfaceOrientation und didRotateFromInterfaceOrientation sind in iOS 8 veraltet, aber auch iOS 8 Delegate Methoden werden nicht aufgerufen. Jedes Mal, wenn vc2 von vc1 gestartet wird, wird immer nur im Hochformat-Modus geladen, obwohl ich die unterstützte Schnittstellenausrichtung als Landscape-Link erwähnte.

Irgendwelche Ideen ... ist es ein Fehler in iOS8?

+0

Vielleicht möchten Sie einen Blick auf diese http://stackoverflow.com/questions/25238620/ios-8-rotation-methods-deprecation-backwards-compatibility – rahulinaction

+0

Gehen Sie über diesen Link http://stackoverflow.com/ Fragen/25935006/ios8-Interface-Rotation-Methoden-nicht-aufgerufen –

Antwort

2

Nun, ich habe Ihr Problem am besten nicht herausgefunden, aber sobald ich eine Reihe von Zeilen habe, die gut mit Rotation in iOS 8.1 funktionieren, werde ich sie Ihnen präsentieren. Sie werden nur aus der Apple API Reference genommen und ein wenig bearbeitet.

Einfach habe ich dies in jedem VC und ich nur den Code bearbeiten, wenn nötig. Zum Beispiel habe ich eine App, die den ersten View-Controller im Hochformat hat und dann VC ändert (das ist ein Übergang) zu einem LandscapeVC mit verschiedenen Funktionen. Dies sind die Hochformatmethoden, die zu einer Drehung in LandscapeView führen.

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

Ich hoffe, ich machte es einfach zu verstehen. Zögere nicht, meine Antwort zu verbessern, wir alle lernen in diesem Leben!

Verwandte Themen