2009-12-11 50 views
8

Estoy desarrollando una aplicación de iPhone que tiene varias puntas, y debe ser solo horizontal.Aplicación de iPhone para solo paisaje con múltiples plumillas

La aplicación está configurada para iniciarse en modo horizontal a través de su archivo Info.plist.

Tengo dos controles de vista: FirstViewController y SecondViewController.

Para cada uno de estos tengo un archivo de punta, donde la vista está en el paisaje. Ambos controladores de vista se agregan a mi semilla MainView como puntos de venta, y sus vistas se inicializan de forma diferida.

Cuando se carga la aplicación, la primera vista se muestra en horizontal, como se esperaba. Sin embargo, cuando cambio a la segunda vista, el dispositivo (o simulador) permanece en el paisaje, pero la vista se gira, como si el dispositivo estuviera en modo vertical, frenando mi interfaz.

En ambas clases UIViewController Tengo el siguiente código:

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

y para cambiar de vista, en mi aplicación delegado que estoy haciendo:

[viewController.view removeFromSuperview]; 
[window addSubview:secondViewController.view]; 

donde viewController y secondViewController son los dos puntos de venta donde los controladores de vista están conectados.

Esta es la forma en la segunda vista se ve en IB: alt text http://img27.imageshack.us/img27/4898/picture1ni.png

y esto es lo que parece en el simulador: alt text http://img402.imageshack.us/img402/4866/picture2wt.png

¿Por qué es que el segundo punto de vista está mostrando en el paisaje, pero con la interfaz rotado?

No me gustaría tratar con las propiedades de transformación, ya que parece excesivo.

Respuesta

3

He hecho esta pregunta con la esperanza de que alguien te diera una respuesta perspicaz y aprendería algo ... lamentablemente, me temo que deberías usar transformadas para que funcione correctamente. Aquí está el código que he estado utilizando últimamente para resolver el problema:

- (void)forceLandscapeForView:(UIView *)theView { 
    theView.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    theView.bounds = CGRectMake(0, 0, 480, 320); 
    theView.center = CGPointMake(160, 240); 
    [theView setNeedsLayout]; 
    [theView setNeedsDisplay]; 
} 

Luego, cuando se va a añadir la nueva vista, comprobar la orientación actual y si la fuerza necesaria la rotación:

if (!UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { 
    [self forceLandscapeForView:_activeViewController.view]; 
} 

Entonces por supuesto, usted quiere dar una respuesta adecuada a shouldAutorotateToInterfaceOrientation en cada uno de sus controladores de vista:

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

me encantaría saber acerca de las soluciones alternativas si esto no es todo lo nece sary.También hay una advertencia que he notado con esta configuración: si tiene una transición entre las vistas y gira el teléfono durante esa transición, es posible que las orientaciones de las vistas se volteen o "peguen" en una orientación apaisada incorrecta, como que debe voltear el teléfono (paisaje-derecha vs paisaje-izquierda) mientras navega entre vistas.

+0

Hasta ahora, este ha demostrado ser el enfoque más confiable para lograr lo que quiero. – pgb

+0

Este (el primer método) funcionó para mí. He estado buscando una solución durante horas y he intentado algo similar antes (pero dentro de las vistas didLoad ...). Aplique la transformación anterior antes de agregarla como subvista. – Wollan

0

es solo una sugerencia, pero puede intentar devolver NO en el método shouldAotorotate para la segunda vista. O intente hacerlo en la vista de retrato en el IB. Parece que su vista se cargó correctamente (en el modo horizontal) pero luego recibió el mensaje Autorizar y se giró 90 grados.

+0

Lo probé ya, y no funcionó. – pgb

Cuestiones relacionadas