2011-07-02 11 views
6

Zbudowałem grę na iOS, która jest zaprojektowana do pracy w orientacji poziomej i działa dobrze, z tym wyjątkiem, że po przełączeniu urządzenia w tryb portretowy zatrzymuje się na nim z interfejsem wypełniającym tylko środkową część ekranu. Jak zmusić aplikację do zezwalania tylko na dwa tryby pejzażu i nie zatrzymywać się w pozycji portretu.AS3 - tylko tryb pejzażu siłowego iOS?

Próbowałem wszystkich ustawień publikowania. Współczynnik proporcji jest ustawiony na Krajobraz i Automatyczna orientacja jest włączona, jeśli odznaczę AUto Orientacja, że ​​aplikacja nie obraca się do innego trybu poziomego i słyszę, że jest to automatyczne odrzucenie od Apple.

Ta aplikacja jest gotowa do użycia, z wyjątkiem tej małej wady. Dziękuję za pomoc, którą możesz zaoferować.

Rich

+0

Brakuje mi różnicy między tym, co chcesz zrobić, a tym, co Apple odrzuca ... Chcesz zostawić automatyczne obracanie, ale tylko pozwól aplikacji obracać się do orientacji poziomej, a Apple odrzuca, ponieważ nie obsługuje wszystkich orientacji, jeśli ma sens, aby aplikacja działała we wszystkich stanach. – Aaron

+0

Apple nie wymaga, aby aplikacja na iPada pozwalała na korzystanie zarówno z krajobrazu, jak i portretu, ponieważ wymagają one zarówno pracy w orientacji poziomej, jak i pionowej. Flash zbudowany w ipa pozwolił mojej aplikacji krajobrazowej zatrzymać się w pozycjach portretowych i zmniejszyć zawartość, aby pasowała. Poniższy kod działał, aby rozwiązać problem. – Rich

Odpowiedz

11

znalazłem odpowiedź na to pytanie nad na forum Adobe kilka dni temu.

Ustaw współczynnik kształtu na Auto.

Ustaw dla orientacji automatycznej na wartość dozwoloną.

Następnie użyć tego kodu na swojej głównej klipu:

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

działało w porządku dla mnie ..

+0

Fantastyczny, działał idealnie. Dzięki wielkie! – Rich

+0

Wygląda dobrze, teraz rozumiem, co masz na myśli. – Aaron

+2

preventDefault() nie działa już w iOS6 + –

2

Innym, aczkolwiek podobny sposób to zrobić, to ustawić aspectRatio do krajobrazu w deskryptorze aplikacji i autoOrienty na false. Następnie włącz autoOrienty po załadowaniu aplikacji i posłuchaj zdarzenia orientationChanging. W programie Flash Builder 4.6, to może być wykonane w następujący sposób:

Eurovoc:

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

Kod aplikacji:

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

Wygląda na to trzeba także mieć pewność, że aplikacja posiada wyraźne wymiary ; w przeciwnym razie widoki mogą nadal być zmieniane, nawet jeśli scena nie zmieni orientacji.

proszę zobaczyć: http://bugs.adobe.com/jira/browse/SDK-32082

1

Odpowiedź powyżej nie działa dla mnie, ponieważ na iOS preventDefault już nie działa.

Dla każdego, kto jeszcze nie ma szczęścia ... Oto co zrobiłem.

Chciałem:

urządzenia

Ipad & Wszystko Android Tablet móc Pionowa lub Pozioma i automatycznego obracania się w dowolnym kierunku

iPhone'y, iPody, & Wszystkie Drobny sprzęt ekranie, aby być zmuszony Landscape (lub może w twoim przypadku chcesz wymuszonego portretu).

Zrobiłem:

IN my -app.xml:

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

w języku 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); 
     } 

Choć myślę, że można łatwo umieścić StageAspectRatio.PORTRAIT lub nawet użyć odwrotnej logiki tylko czy coś iPadów logicznych. Powodzenia!

EDYCJA: Naprawdę edytuję to, ponieważ nawet ta metoda nadal ma problemy. Dostaniesz krajobraz, ale nie zawsze jest to krajobraz zorientowany na to, jak trzymasz urządzenie ...

EDYTOR ZNÓW (2-27-2014): Okazuje się, że zawarłem -swf-version 23 (teraz z AIR 4.0) ten problem został ostatecznie rozwiązany.