2012-09-30 25 views
17

In iOS6, shouldAutorotateToInterfaceOrientation è obsoleto. Ho provato a utilizzare supportedInterfaceOrientations e shouldAutorotate per rendere l'app funzionante correttamente per l'autorotazione, ma non è riuscita.Come rendere l'app pienamente funzionante correttamente per l'autorotazione in iOS 6?

questo ViewController Non voglio ruotare, ma non funziona.

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

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Qualche idea? Grazie per l'aiuto in anticipo!

+0

Il controller di visualizzazione è incorporato in un controller di navigazione o controller tabbar? – Felix

+0

incorporato in un controller di navigazione. @ phix23 – Carina

risposta

38

Capito.

1) sottoclasse UINavigationController (la viewcontroller superiore della gerarchia prenderà il controllo dell'orientamento.) ha impostato come self.window.rootViewController.

- (BOOL)shouldAutorotate 
{ 
    return self.topViewController.shouldAutorotate; 
} 
- (NSUInteger)supportedInterfaceOrientations 
{ 
    return self.topViewController.supportedInterfaceOrientations; 
} 

2) se non volete vista del regolatore ruotare

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

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

3) se si vuole che sia in grado di ruotare

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

BTW, Secondo alle vostre esigenze, un altro metodo correlato:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
+2

+1 per rispondere alla tua stessa domanda con alcuni esempi di codice simpatici –

+0

Ho provato questo metodo e funziona bene. – Robert

+0

Perché si sovrascrive '- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation'? È obsoleto e non chiama mai – voromax

3

Se si utilizza un controller di barra delle linguette anziché un controller di navigazione come controller di root, è necessario suddividere in sottoclasse UITabBarController.

Anche la sintassi sarà diversa. Ho usato il seguente con successo. Ho quindi utilizzato gli esempi precedenti con successo sui controller di visualizzazione che volevo ignorare. Nel mio caso volevo che la schermata principale non ruotasse ma avevo una schermata FAQ con filmati che naturalmente desideravo abilitare la visualizzazione orizzontale. Ha funzionato perfettamente! Basta notare la modifica della sintassi a self.modalViewController (si otterrà un avvertimento del compilatore se si tenta di utilizzare la sintassi per un controller di navigazione.) Spero che questo aiuti!

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (BOOL)shouldAutorotate 
{ 
    return self.modalViewController.shouldAutorotate; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return self.modalViewController.supportedInterfaceOrientations; 
}