2011-07-02 20 views
6

He creado un juego para iOS que está diseñado para el modo horizontal y funciona bien, excepto que si se cambia el dispositivo al modo vertical, se detiene allí con la interfaz que solo ocupa la mitad central de la pantalla. ¿Cómo puedo forzar la aplicación para que solo permita los dos modos de paisaje y no detenerme en la posición de retrato?AS3 - ¿Solo iOS forza el modo de paisaje?

He intentado todas las configuraciones de publicación. La relación de aspecto está configurada para Horizontal y la orientación automática está activada, si desactivo la orientación AUto que la aplicación no gira al otro modo horizontal y escucho que es un rechazo automático por parte de Apple.

Esta aplicación está lista para usar, excepto por este pequeño defecto. Gracias por cualquier ayuda que pueda ofrecer.

Rich

+0

Me falta la diferencia entre lo que está pidiendo hacer y lo que Apple rechaza ... Quiere dejar la rotación automática pero solo permite que la aplicación gire a orientaciones de paisaje y Apple rechaza por no apoyar todas las orientaciones si tiene sentido que la aplicación funcione en todos los estados. – Aaron

+0

Apple no requiere que una aplicación para iPad permita el paisaje y el retrato, solo requieren el trabajo de ambos paisajes o ambos. El ipa Flash construido permitía que mi aplicación de paisaje se detuviera en las posiciones de retrato y redujera el contenido para que encajara. El siguiente código funcionó para resolver el problema. – Rich

Respuesta

11

he encontrado la respuesta a esta más en los foros de Adobe hace unos días.

Ajuste la relación de aspecto a automático.

Establezca Orientación automática a permitido.

A continuación, utilice este código en su clip principal:

var startOrientation:String = stage.orientation; 
if (startOrientation == StageOrientation.DEFAULT || startOrientation == StageOrientation.UPSIDE_DOWN) 
    { 
    stage.setOrientation(StageOrientation.ROTATED_RIGHT); 
    } 
    else 
    { 
    stage.setOrientation(startOrientation); 
    }      

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChangeListener); 

function orientationChangeListener(e:StageOrientationEvent) 
{ 
    if (e.afterOrientation == StageOrientation.DEFAULT || e.afterOrientation == StageOrientation.UPSIDE_DOWN) 
    { 
    e.preventDefault(); 
    } 
} 

funcionó bien para mí ..

+0

Fantástico, funcionó a la perfección. ¡Muchas gracias! – Rich

+0

Se ve bien, entiendo lo que quieres decir ahora. – Aaron

+2

preventDefault() ya no funciona en iOS6 + –

2

Otro, aunque similares, manera de hacer esto es para establecer el aspectRatio a horizontal en el descriptor de la aplicación y autoOrients a falso. Luego habilite autoOrients una vez que la aplicación se haya cargado y escuche el evento orientationChanging. En Flash Builder 4.6, esto se puede hacer de la siguiente manera:

descriptor:

<aspectRatio>landscape</aspectRatio> 
<autoOrients>false</autoOrients> 

El código de aplicación:

private function applicationCompleteHandler():void { 
    stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, stageOrientationChangingHandler); 
    stage.autoOrients = true; 
} 

private function stageOrientationChangingHandler(event:StageOrientationEvent):void { 
    if (event.afterOrientation == StageOrientation.DEFAULT || event.afterOrientation == StageOrientation.UPSIDE_DOWN) { 
     event.preventDefault(); 
    } 
} 

Parece que también hay que asegurarse de que la aplicación tiene dimensiones explícitas ; de lo contrario, las vistas pueden cambiar de tamaño incluso aunque la etapa no se reoriente.

favor ver: http://bugs.adobe.com/jira/browse/SDK-32082

1

La respuesta anterior no funcionó para mí, porque en IOS preventDefault ya no funciona.

Para cualquiera que todavía no esté teniendo buena suerte ... Esto es lo que hice.

que querían:

dispositivos

Ipad & Todas las apps Tablet para poder vertical u horizontal y auto-rotación en cualquier dirección

Iphones, Ipods, & Todos los dispositivos de pantalla pequeña a ser obligados paisaje (o tal vez en tu caso quieras un retrato forzado).

Hice:

IN my -app.xml:

<aspectRatio>any</aspectRatio> 
<autoOrients>true</autoOrients> 

en ActionScript:

 var screenDPI:Number = Capabilities.screenDPI; 
     var resolutionX:Number = Capabilities.screenResolutionX; 
     var resolutionY:Number = Capabilities.screenResolutionY;    
     var numDiagonalDistance:Number = Math.round(Math.sqrt((resolutionX*resolutionX)+(resolutionY*resolutionY)));    
     var numDiagonalInches:Number = numDiagonalDistance/screenDPI; 


      if(numDiagonalInches<6){ 
       MainData.SMALL_DEVICE=true; 
      }else{ 
       MainData.SMALL_DEVICE=false;       
      } 


     if(MainData.SMALL_DEVICE){ 
      this.stage.setAspectRatio(StageAspectRatio.LANDSCAPE); 
     } 

Aunque Creo que se puede poner fácilmente StageAspectRatio.PORTRAIT o incluso utilizar la lógica inversa a sólo ipads o algo de lógica. ¡Buena suerte!

EDITADO: En realidad estoy editando esto porque incluso este método todavía tiene problemas. Obtendrá un paisaje, pero no siempre es el paisaje orientado a la forma de sujetar el dispositivo ...

EDITADO OTRA VEZ (2-27-2014): Resulta que si incluí -swf-versión 23 (ahora con AIR 4.0) este problema finalmente se resuelve.

Cuestiones relacionadas