iPhone SDK: Orientamento (vista orizzontale e verticale)

Ok, ho la mia app normale che è in modalità verticale. Posso forzare la mia app per andare in modalità orizzontale per una vista (usando navigationcontroller e viewcontroller) in questo modo:

- (void)viewWillAppear:(BOOL)animated { [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; } 

Ma poi quando torno al menu principale (tableview) torna direttamente al ritratto. Provo questo codice:

 - (void)viewWillAppear:(BOOL)animated { [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; } 

Ma quello non funziona ..

Qualche idea?

    Dai un’occhiata alla funzione shouldAutorotateToInterfaceOrientation: nella class UIViewController. Questa funzione restituisce SÌ se gli orientamenti sono supportati dal tuo UIView. Se si restituisce SÌ solo all’orientamento orizzontale, l’iPhone verrà automaticamente inserito in tale orientamento.

    Il seguente codice dovrebbe farlo. Mettilo in UIViewController che controlla la vista che vuoi mettere in modalità orizzontale.

     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationLandscape); } 

    Per farlo funzionare, ho aggiunto questo al rootviewcontroller:

     - (void)viewWillAppear:(BOOL)animated { [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; } 

    Sembra che funzioni adesso.

    Ecco cosa sto facendo per fare questo:

    per prima cosa, metti questa definizione nella parte superiore del tuo file, proprio sotto le tue #import:

     #define degreesToRadian(x) (M_PI * (x) / 180.0) 

    quindi, nel viewWillAppear: method

     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); } 

    se vuoi che sia animato, puoi avvolgere il tutto in un blocco di animazione, in questo modo:

     [UIView beginAnimations:@"View Flip" context:nil]; [UIView setAnimationDuration:1.25]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); } [UIView commitAnimations]; 

    Quindi, nel tuo controller in modalità verticale, puoi eseguire l’operazione inversa: verifica se è attualmente in orizzontale e, in caso affermativo, riportala a Portrait.

    È necessario modificare il file Info.plist per aggiungere la chiave UIInterfaceOrientation con il valore appropriato (UIInterfaceOrientationLandscapeRight o UIInterfaceOrientationLandscapeLeft).

    Non puoi utilizzare questa API privata.

    C’è una soluzione per farlo: è usare un controller di visualizzazione e aggiungere la sua vista alla finestra. poi in quel controller devi forzare il panorama nel metodo shouldAutorotate …. Funziona bene, ma assicurati che sia necessario che il tuo progetto lo usi, perché non è molto intelligente costringere l’utente a trasformare il suo iPhone. A proposito, ecco un codice di esempio se ne hai bisogno.

    http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html