Come forzare l'orientamento verticale in iOS 7
se la mia applicazione è inizialmente supportata per entrambi gli orientamenti?Come forzare l'orientamento verticale?
risposta
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:c animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
Questo codice non è conforme allo standard di Apple, non è sicuro ... ma è un buon compromesso. –
Quando utilizziamo questo codice, la nostra app non verrà approvata dalla Apple per la produzione. –
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
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
Per l'intera applicazione, aprire il file di progetto, vai alla scheda Generale, modificare le impostazioni:
Or direttamente sul file Info.plist:
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.
Semplice e giusto, ma attenzione al - (BOOL) shouldAutorotate method. Non deve essere sovrascritto, o restituisce SÌ, altrimenti non funzionerà. – Moose
#import <objc/message.h>
objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationLandscapeRight);//here you may change your desired Orientation
Non è chiaro puoi spiegare di più. È necessaria solo la modalità verticale nell'intera app – morroko
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) –