2011-06-14 13 views
12

Sé cómo permitir/denegar la orientación para girar usando¿Hay alguna manera de forzar la orientación de la interfaz para que cambie en iPhone?

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Sin embargo, tengo el problema ahora donde el teléfono podría estar en el retrato (o patas arriba) y en algún momento quiero girar el pantalla como si el usuario girara hacia el paisaje. En este punto, no quiero que el autorotato 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 desactivar el autorrotatorio, pero forzar la rotación, en primer lugar, no tengo idea de cómo hacerlo.

Aquí es lo que estoy tratando de hacer:

  • La aplicación gira a cualquiera y todas las orientaciones. Todo es normal.

  • Se produce un evento.

  • Ahora la autorotación solo funciona para landscapeleft y landscaperight. Además, si el usuario está en posición vertical o vertical, rotaré programáticamente hacia el paisajismo para bloquear al usuario en esa orientación.

para hacer las cosas más difíciles, quiero que aparezca un UIAlertView (sé cómo hacerlo) antes de la rotación forzada, dejando que el usuario sepa lo que está pasando, y quiero pantalla detrás del alertView a rotar pero no la alertaView. ¿Esto es posible?

Gracias.

Respuesta

-2

sí, usted puede hacer eso. lo que tiene que hacer es en - (void) Método viewWillAppear basta con incluir el siguiente código

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

se va a resolver su problema

+2

Esta API está oculta, la propiedad de orientación para las instancias de UIDevice es de solo lectura, por lo que puede causar problemas durante el proceso de revisión por parte de Apple. –

0
- (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 añadir que la notificación en el caso

0

No se puede . Al menos no de una forma que Apple permita. La autorrotación está diseñada para ser la misma para toda la aplicación. Puede crear un código que haga girar la vista manualmente, pero en lo que respecta a UIDevice, tendrá la misma orientación.

1

La mejor solución para su situación es notificar al usuario para convertirlo en orientación horizontal y pausar el programa hasta que el usuario gire la orientación. Y luego, cuando el usuario gira el dispositivo, puede manejar los métodos 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 obtener la aplicación aprobada en la tienda de aplicaciones. Espero que tenga sentido.

0

Según Apple, si no desea que el comportamiento por defecto proporcionada por la API de dispositivo de rotación orientación:

Puede tomar el control de:

  • Las orientaciones admitidas por la aplicación
  • Cómo se anima una rotación entre dos orientaciones en la pantalla.

La forma leí esto es "Usted puede controlar cualquiera de estas cosas, pero nada más" o "Se le permite controlar sólo estas dos cosas."

No veo nada en la documentación que explícitamente le indique cómo "forzar" la orientación para cambiar. Todo esto lo maneja el dispositivo para que parezca más natural y amigable para la persona que sostiene el dispositivo. ¿Tiene sentido?

Consulte los documentos aquí en los cambios de rotación:

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

Por último, yo diría que esto no es posible, y además que no sería aprobado por Apple. Elegí la respuesta de Praveen porque creo que es posible que deba considerar un enfoque diferente para lo que está tratando de hacer.

Cuestiones relacionadas