2011-07-02 244 views
6

我已經爲iOS設計了一款專爲橫向模式設計的遊戲,它的工作原理很好,只是如果您將設備設置爲縱向模式,它會停在那裏,而界面只會填滿屏幕的中間部分。我如何強制應用程序只允許兩種風景模式,而不是停在縱向位置。AS3 - iOS強制橫向模式?

我試過所有的發佈設置。如果我取消選中AUto方向,表示應用程序不會旋轉到其他橫向模式,並且我聽說這是Apple自動拒絕,則選中橫向比率設置爲橫向,並選中自動方向。

這個程序已準備好去除了這個小缺陷。謝謝你盡你所能的幫助。

Rich

+0

我錯過了你要做的和蘋果拒絕的區別......你想離開自動旋轉,但只讓應用程序旋轉到風景方向,蘋果拒絕不支持所有方向,如果它對於應用程序在所有狀態下運行有意義。 – Aaron

+0

蘋果公司並不要求iPad應用程序允許橫向和縱向,他們只需要橫向或兩個肖像的工作。 Flash內置的ipa允許我的風景應用停止在肖像位置並縮小內容以適應。下面的代碼解決了這個問題。 – Rich

回答

11

我在幾天前的Adobe論壇上找到了答案。

將長寬比設置爲自動。

將Auto Orientation設置爲允許。

然後使用此代碼對你的主剪輯:

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(); 
    } 
} 

工作得很好,我..

+0

神奇,完美運作。非常感謝! – Rich

+0

看起來不錯,我明白你的意思了。 – Aaron

+2

preventDefault()不再適用於iOS6 + –

2

另外,雖然類似,這樣做,這是對的aspectRatio設置爲橫向應用程序描述符和autoOrients爲false。然後在應用程序加載並偵聽orientationChanging事件後啓用autoOrients。在Flash Builder 4.6,可以這樣做如下:

描述:

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

施藥代碼:

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(); 
    } 
} 

看起來你也必須確保該應用程序有明確的尺寸;否則,即使通過階段不重新調整方向,視圖仍可能調整大小。

請參閱: http://bugs.adobe.com/jira/browse/SDK-32082

1

答案上面並沒有爲我工作,因爲iOS上的preventDefault不再起作用。

對於任何一個還沒有好運的人......這就是我所做的。

我想:要

的Ipad &所有Android平板設備能夠縱向或橫向和自動旋轉在任何方向

iPhone手機,音樂播放器,&所有小屏幕設備被迫景觀(或也許在你的情況下你想要強制肖像)。

I Did:

IN my -app。XML:

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

在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); 
     } 

雖然我想你可以很容易地把StageAspectRatio.PORTRAIT甚至使用反向邏輯來只什麼邏輯臺iPad。祝你好運!

編輯:我實際上編輯這個,因爲即使這種方法仍然有問題。你會得到風景,但它並不總是面向你如何持有該設備的景觀...

再次編輯(2-27-2014):原來,如果我包括-swf-version 23(現在與AIR 4.0)這個問題終於解決了。

相關問題