2016-12-06 12 views
0

Meine app hat Portrait-Modus, wie folgt Bild: Device OrientationiOS: spezifischer Landschaftsmodus

Aber es braucht Landscape-Modus in maßgeschneiderten UIViewController zu unterstützen. Ich habe überschreiben Folgefunktionen:

- (BOOL)shouldAutorotate 
    { 
     return NO; 
    } 

    - (UIInterfaceOrientationMask)supportedInterfaceOrientations 
    { 
     return UIInterfaceOrientationMaskLandscape; 
    } 

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
    { 
     return UIInterfaceOrientationLandscapeRight; 
    } 

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
     return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
    } 

Es ist in den meisten Fällen funktioniert, aber irgendwie wäre es handelte wie Follow Bild: problem picture

es einen Konflikt zwischen der Geräteausrichtung und MyViewController Orientierung zu haben scheint.

PS: Mein Gerät ist iPhone 6s Plus, System ist iOS 10.0, dieses Problem gibt es auch in iPhone 6s.

+0

kann ich vorschlagen, dass Sie diese Alternative erreichen? – KKRocks

+0

ja, PLZ, ich würde gerne wissen, thx – zxbeef

+0

überprüfen Sie meine Antwort. es funktionierte gut in meinen Projekten. – KKRocks

Antwort

0

bereits.

AppDelegate.h

@property() BOOL restrictRotation; 

AppDelegate.m

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
if(self.restrictRotation) 
    return UIInterfaceOrientationMaskPortrait; 
else 
    return UIInterfaceOrientationMaskAll; // you can change orientation for specific type . for ex landscape left 
} 

Viewcontroller

-(void) restrictRotation:(BOOL) restriction 
{ 
    AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
    appDelegate.restrictRotation = restriction; 
} 

viewDidLoad

[self restrictRotation:YES]; or NO 

Sie müssen diese Zeile in jedem Viewcontroller schreiben, wo Sie

für mehr ändern müssen: https://stackoverflow.com/a/25952571/3901620

+0

Mein Projekt ist so konzipiert, dass es von anderen Entwicklern als statische Bibliothek verwendet wird, daher ist AppDelegate möglicherweise nicht geeignet. Thx trotzdem. – zxbeef

+0

Mein Code funktioniert in den meisten Fällen gut, aber der MyViewController ist nicht zufällig. Und ich weiß nicht warum ... – zxbeef

0

Sie können folgenden Code in AppDelegate .Dies ist einzig mögliche Lösung, die Swift Code

arbeiten
func application(_ application: UIApplication, 
supportedInterfaceOrientationsFor window: UIWindow?) -> 
UIInterfaceOrientationMask { 

     let vc = self.window?.currentViewController() 
     if vc?.isKind(of: YourDesiredVCToChangeOrientation.self) == true { 
      return UIInterfaceOrientationMask.landscape; 
     } else { 
      return UIInterfaceOrientationMask.all ; 
     } 

    } 
Verwandte Themen