2014-05-22 15 views
5

Come forzare l'orientamento verticale in iOS 7 se la mia applicazione è inizialmente supportata per entrambi gli orientamenti?Come forzare l'orientamento verticale?

+1

Non è chiaro puoi spiegare di più. È necessaria solo la modalità verticale nell'intera app – morroko

+1

possibile duplicato di [Forza l'orientamento verticale mentre si spinge da Landscape View Controller] (http://stackoverflow.com/questions/14633213/force-portrait-orientation-while-pushing-from-landscape -view-controller) –

risposta

2
UIViewController *c = [[UIViewController alloc]init]; 
[self presentViewController:c animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
+0

Questo codice non è conforme allo standard di Apple, non è sicuro ... ma è un buon compromesso. –

+0

Quando utilizziamo questo codice, la nostra app non verrà approvata dalla Apple per la produzione. –

+1

Puoi spiegare perché funziona, per favore? Inoltre, questi metodi sono stati deprecati in iOS 6. È possibile che Apple decida di rimuoverli su iOS 8. Non sarebbe la prima volta che un metodo viene ritirato da Apple e rimosso poco dopo. – rtiago42

0

Uso approccio seguito: Nella tua app delegato .h

@interface PlayWithWSWithLibAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> { 

     BOOL flagOrientationAll; 
} 

@property (assign) BOOL flagOrientationAll; 

Add seguente metodo nel file .m delegato app

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    //NSLog(@"PlayWithWSWithLibAppDelegate -- supportedInterfaceOrientationsForWindow"); 
    if(flagOrientationAll == YES){ 
     return UIInterfaceOrientationMaskPortrait; 
    } else { 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

Implementare segue a suo avviso, che si vuoi ruotare sia in verticale che in orizzontale sia per il dispositivo iPhone

-(void)viewWillAppear:(BOOL)animated 
{ 
    self.tabBarController.delegate = self; 

    PlayWithWSWithLibAppDelegate *delegate = (PlayWithWSWithLibAppDelegate *) [[UIApplication sharedApplication] delegate]; 
    delegate.flagOrientationAll = YES; 
} 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    //NSLog(@"viewWillDisappear -- Start"); 
    PlayWithWSWithLibAppDelegate *delegate = (PlayWithWSWithLibAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     delegate.flagOrientationAll = NO; 
} 

Ecco il mio thread qualche cosa simile al vostro problema: iOS 7 Interface Orientation

5

Per l'intera applicazione, aprire il file di progetto, vai alla scheda Generale, modificare le impostazioni:

enter image description here

Or direttamente sul file Info.plist:

enter image description here

se desideri solo su uno specifico controller di vista, ignorare supportedInterfaceOrientations:

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Si può leggere di più sul secondo metodo nei confronti del funzionario UIViewController documentation. Forse troverai un modo più adatto per il tuo problema specifico.

+0

Semplice e giusto, ma attenzione al - (BOOL) shouldAutorotate method. Non deve essere sovrascritto, o restituisce SÌ, altrimenti non funzionerà. – Moose

-2
#import <objc/message.h> 

objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationLandscapeRight);//here you may change your desired Orientation