Въведение: Имам проект AIR Mobile AS3, където искам да получавам всички събития за ориентация onChange, но никога не позволявам на устройството да завърти екрана (сам правя необходимата промяна). Затова задавам autoOrients=true (необходим за получаване на събития за ориентация) и се опитвам да предотвратя въртенето на устройството чрез e.preventDefault (вече отхвърлено за iOS).
Можете да изтеглите проект на FlashDeveloper с проблема тук. Качете го на устройство с Android и ме уведомете, ако получите StageOrientationEvents при завъртане обратно към Default (Portrait).
Трите други ориентации се задействат добре и получавам от afterOrientation:
- завъртяно надясно
- завъртяналяво
- с главата надолу
Но при завъртане обратно към първоначалната позиция (Protrait) StageOrientationEvent не се задейства.
Моят application.xml е така:
<visible>true</visible>
<fullScreen>false</fullScreen>
<autoOrients>true</autoOrients>
<aspectRatio>any</aspectRatio>
<resizable>true</resizable>
Интересно е, че когато стартирам приложението си на мобилно устройство в пейзаж, получавам:
- завъртяналяво
- с главата надолу
- по подразбиране
Така че отново, при завъртане до първоначалната позиция (в този случай rotatedRight) StageOrientationEvent не се задейства. Първоначалната позиция не дава StageOrientationEvent.
Това е моят слушател:
private function onOrientationChanging(e:StageOrientationEvent):void {
e.preventDefault();
ui.console.field.text += "\nORIENTATION_CHANGING "+e.afterOrientation;
var rot:Number = 0;
switch (e.afterOrientation){
case "rotatedRight":
rot = 90;
break;
case "rotatedLeft":
rot = -90;;
break;
case "upsideDown":
rot = 180;;
break;
default:
rot = 0;
break;
}
TweenMax.to(ui.console.orient, 3, { shortRotation:{rotationZ:rot}, ease:Elastic.easeOut } );
}
Дори се опитах да премахна e.preventDefault() с надеждата, че това по някакъв начин не само деактивира автоматичното завъртане на приложението, но също така по някакъв начин може да предотврати задействането на завъртането по подразбиране. Но това не е така.
Някакви идеи?
Спецификации:
FlashDevelop 5.0
SDK Air17.0 + FLex 4.6.0
Android Nexus 5 Android 5.1.1