Pregunta

Estoy desarrollando una aplicación para iPhone que tiene varias puntas, y debe ser único paisaje.

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

Tengo dos controladores de vista: FirstViewController y SecondViewController.

Para cada uno de estos Tengo un archivo de punta, donde la vista es en el paisaje. Ambos controladores de vista se añaden a mi semilla MainView como puntos de venta, y sus puntos de vista se inicializan con pereza.

Cuando se carga la aplicación, los primeros vista muestra en el paisaje, como se esperaba. Sin embargo, al cambiar a la segunda vista, el dispositivo (o simulador) permanece en el paisaje, pero la vista se hace girar, como si el dispositivo estuviera en modo vertical, el frenado 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 están conectados los controladores de vista.

Así es como el segundo punto de vista se ve en IB: texto alt http://img27.imageshack.us/img27/4898/picture1ni.png

y así es como se ve en el simulador: texto alt http://img402.imageshack.us/img402/4866/picture2wt.png

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

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

¿Fue útil?

Solución

protagonizó esta pregunta esperando que alguien le daría una respuesta perspicaz y me gustaría aprender algo .. por desgracia me temo que puede que tenga que utilizar transformaciones para conseguir que esto 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];
}

A continuación, 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];
}

A continuación, 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 necesario. También hay una advertencia que he notado con esta configuración: si usted tiene una transición entre las vistas, y se gira el teléfono durante esa transición, es posible que los puntos de vista orientaciones para conseguir voltear o "pegado" en la orientación horizontal mal, tales que necesita para encender el teléfono sobre (paisaje derecha vs paisaje-izquierda) a medida que navega entre las vistas.

Otros consejos

es sólo una sugerencia, pero se puede tratar de volver NO en el método shouldAotorotate para el segundo punto de vista. O tratar de hacerlo en la vista vertical en el IB. Parece que su vista se ha cargado correctamente (en el modo de paisaje), pero luego recibió el mensaje shouldAutorotate y había sido girado 90 grados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top