Pregunta

¿Editar para preguntar si Autolayout ayuda en esta situación?

¿Cómo puedo hacer que mi uilabel mantenga una posición fija en la pantalla pero aún gire? DebeeutorotateToInterFeArientation está devolviendo sí y la etiqueta está girando bien, pero no importa cómo configure los puntales y resortes en Xcode la posición de la etiqueta cambia.

La primera imagen muestra cómo he creado el diseño en el guión gráfico, con cuatro uilabels individuales. La segunda imagen muestra cómo aparece el paisaje, no lo que quiero. La tercera imagen muestra cómo me gustaría que se vieran el paisaje, con la animación de rotación de cada número centrado en el número en sí.

This is how I've created the layout in storyboard, with four individual UILabels. This is how landscape appears -- not what I want. Here is what I would like landscape to look, with the rotation animation of each number centered on the number itself.

¿Fue útil?

Solución

VRK está en el camino correcto con su respuesta, pero shouldAutorotateToInterfaceOrientation: no es el método correcto para establecer sus etiquetas. Cuando recives shouldAutorotateToInterfaceOrientation:, nada se ha actualizado para la nueva orientación hasta ahora.

Debes presentar tus puntos de vista en willAnimateRotationToInterfaceOrientation:duration:. Como la documentación Estados:

Para cuando se llama a este método, el interfaceOrientation La propiedad ya está configurada en la nueva orientación, y los límites de la vista se han cambiado. Por lo tanto, puede realizar cualquier diseño adicional requerido por sus puntos de vista en este método.

Podrías incluso animar Sus puntos de vista a sus nuevas posiciones en este método.

Otros consejos

Puede realizar una rotación en las etiquetas (transformatin). Haga eso en el método de interfaceorientación de DidrotateFrom en UIViewController.

uilabel.transform = cGaffinetransformMakeroTation (m_pi / -4); como esto. Realice esto en los cuatro orientación. Y una cosa toma la orientación de la barra de estado de AppDelegate que no sea la orientación del dispositivo. Le ayudará a mantenerse sincronizado con la orientación de la vista.

Debe establecer los valores de posición de cuadro de la etiqueta manualmente en el método de AutorotateTointerAdreFeorientation

Cree dos uilabels, una horizontal y otra verticalmente. Ocultar y mostrar la etiqueta requerida cuando cambie la orientación. Para hacer esto, debe poner en ViewDidload:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

e implementar

- (void) didRotate:(NSNotification *)notification{

       UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

       if (orientation == UIDeviceOrientationLandscapeLeft)
       {

          // show Horizontal Label
       }
       ....
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top