2008-12-10 10 views
12

He examinado todas las preguntas hasta el momento y ninguna parece responder realmente a esta pregunta.¿Cómo puedo mostrar una UIView en el paisaje?

Creé un UITabBarController y agregué varios controles de vista a él. La mayoría de las vistas se ven en vertical, pero una debe verse en el paisaje. No quiero usar el acelerómetro o detectar cuando el usuario gira el dispositivo, solo quiero mostrar la vista en modo horizontal cuando eligen esa vista desde la pestaña en la parte inferior.

Quiero que ocurran las animaciones normales, como la eliminación de pestañas, la vista girando, etc., cuando eligen ese elemento, y ocurre lo contrario cuando eligen una vista diferente.

¿No hay una propiedad o método incorporado para decirle al sistema qué orientación mostrar como vista?

Anulando el método shouldautorotate ... no hace absolutamente nada hasta donde yo sé.

El tipo de respuesta que no le gustaría es "RTFM" porque ya tengo, y cualquiera que ha desarrollado para el iPhone hasta ahora sabe que hay muy poco M útil para F-ing R.

Respuesta

9

Un post en un foro que podría ayudar. respuesta corta es que hay que girar manualmente la vista o controlador una vez que la vista ha sido elaborado, en el viewWillAppear: Método

CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0); 

[[appDelegate navController].view setTransform:landscapeTransform]; 
+0

Esto no tiene en cuenta ninguna de las animaciones (la pestaña, la barra de estado, etc.) –

+0

El uso de setStatusBarOrientation con esto parece ser una solución de todos modos. –

9

Aquí es lo que estoy haciendo para ello:

en primer lugar, poner esto definir en la parte superior de su archivo, justo debajo de las #imports:

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

a continuación, en el viewWillAppear: método

[[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); 
} 

si quieres que para ser animado, a continuación, se puede envolver todo el asunto en un bloque de animación, así:

[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]; 
0

reemplazar el método de orientación en su clase controlador y obligarlo a paisaje de esta manera:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Overriden to allow any orientation. 
    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

¡Simple y eficiente!

0

shouldAutorotateToInterfaceOrientation solo funciona si todas las vistas en tabbarcontroller o todos los controladores de vista en el controlador de navegación acuerdan una rotación.

Cuestiones relacionadas