¿Hay alguna forma de forzar la orientación de la interfaz para cambiar en iPhone?

Sé cómo permitir / rechazar la orientación para rotar usando

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Sin embargo, tengo el problema ahora en el que el teléfono puede estar en retrato (o en sentido vertical) y en algún momento quiero rotar la pantalla como si el usuario hubiera girado al paisaje. En este punto, no quiero que AutoTate funcione más. Quiero forzar la orientación de la interfaz para permanecer en el paisaje. ¿Hay alguna forma de hacer esto? Probablemente pueda encontrar un truco para apagar la autorrotation, pero forzando la rotation, en primer lugar, no tengo idea de cómo hacerlo.

Esto es lo que trato de hacer:

  • La aplicación gira a todas y cada una de las orientaciones. Todo es normal.

  • Ocurre un evento

  • Ahora, la autocaravana solo funciona para la jardinería y la jardinería. Además, si el usuario está en portrait o portraitupsidedown, rotar mediante progtwigción a landscaperight para bloquear al usuario en esa orientación.

Para hacer las cosas más complicadas, quiero abrir un UIAlertView (sé cómo hacerlo) antes de la rotation forzada, dejando que el usuario sepa lo que está sucediendo, y quiero mostrar detrás de la vista de alerta para rotar, pero no la vista de alerta. ¿Es esto posible?

Gracias.

La mejor solución para su situación es notificar al usuario que lo cambie a orientación horizontal y pausar el progtwig hasta que el usuario cambie de orientación. Y luego, cuando el usuario rota el dispositivo, puede manejar los methods de delegado y comenzar a mostrar la pantalla en el modo horizontal. Este enfoque se ha manejado en muchas de las aplicaciones de la tienda de aplicaciones y parece que es una de las mejores maneras de get la aprobación de la aplicación en la tienda de aplicaciones. Espero que tenga sentido.

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft); } // orientation view swapping logic - (void)didRotate:(NSNotification *)notification { UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation]; if (newOrientation != UIDeviceOrientationUnknown || newOrientation != UIDeviceOrientationFaceUp || newOrientation != UIDeviceOrientationFaceDown) { orientation = newOrientation; } // Write your orientation logic here if ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)) { // Clear the current view and insert the orientation specific view. [self clearCurrentView]; [self.view insertSubview:yourLandscapeView atIndex:0]; } else if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) { // Clear the current view and insert the orientation specific view. [self clearCurrentView]; [self.view insertSubview:yourPortraitView atIndex:0]; } } 

y agregue esa notificación en el evento

No puedes. Al less no de una manera que Apple permita. La autorotation está diseñada para ser la misma para toda la aplicación. Puede hacer un código que rote la vista manualmente, pero en lo que respecta a UIDevice, estará en la misma orientación.

De acuerdo con Apple, si no desea el comportamiento pnetworkingeterminado proporcionado por la API de rotation de orientación del dispositivo:

Puede tomar control sobre:

  • Las orientaciones compatibles con su aplicación
  • Cómo se anima una rotation entre dos orientaciones en la pantalla.

La forma en que leo esto es "Puedes controlar cualquiera de estas cosas, pero nada más" o "Tienes permitido controlar solo estas dos cosas".

No veo nada en la documentation que explícitamente le diga cómo "forzar" la orientación para cambiar. Todo esto es manejado por el dispositivo para que parezca más natural y amigable para la persona que sostiene el dispositivo. Tiene sentido?

Vea los documentos aquí en los cambios de rotation:

http://developer.apple.com/library/ios/#featunetworkingarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html

Finalmente, diría que esto no es posible y, además, no será aprobado por Apple. Recibí la respuesta de Praveen porque creo que deberías considerar un enfoque diferente para lo que intentas hacer.

si puedes hacer eso lo que tiene que hacer está en el método (void) viewwillappear simplemente include el siguiente código

 if (self.interfaceOrientation == <current orientation>) { [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)<to which orientation you want to change.>]; } 

resolverá tu problema