В мобильных приложениях я стараюсь использовать ограничения (сверху, снизу, слева, справа, вертикальный центр, горизонтальный центр) и ширину / высоту в процентах - чтобы при изменениях ориентации я не особо волновался.Когда я волнуюсь, я полагаюсь на состояния просмотра.
Если вы используете класс Flex View
, StageOrientationEvent.ORIENTATION_CHANGE действительно необходим, только если вы хотите предотвратить изменение ориентации.
Причина в том, что класс View
автоматически установит для вас состояние «портретного» или «ландшафтного» вида, если ваша реализация просто включает в себя состояние портретного / ландшафтного вида .Вот метод getCurrentState()
класса View
:
public function getCurrentViewState():String
{
var aspectRatio:String = FlexGlobals.topLevelApplication.aspectRatio;
if (hasState(aspectRatio))
return aspectRatio;
// If the appropriate state for the orientation of the device
// isn't defined, return the current state
return currentState;
}
Так что, если у вашего View
класса есть такие состояния:
<s:states>
<s:State name="portrait" stateGroups="portraitStates,whatever"/>
<s:State name="landcsape" stateGroups="landscapeStates"/>
<s:State name="landscapeWithControls" stateGroups="landscapeStates"/>
</s:states>
Затем вы можете использовать эти имена stateGroupс мощным синтаксисом состояний представлений во Flex 4 для обработки всех остальных задач по ориентации.
Для представлений со сложными состояниями представлений удобно переопределить getCurrentViewState()
и добавить дополнительные имена состояний:
override public function getCurrentViewState():String
{
var state:String = super.getCurrentViewState();
if (someCondition)
{
state+="withControls";
}
return state;
}