У меня есть гибкий компонент с 2 состояниями - "" (то есть без имени/по умолчанию) и "Транзакционный" - и куча переходов для перехода из одного состояния в другое.Переходы состояния в Flex
Существует кнопка для переключения между двумя состояниями, которые вызывает следующие функции при нажатии
public function ToggleState():void
{
if (this.currentState=="Transactional")
{
this.currentState = "";
}
else
{
this.currentState = "Transactional";
}
}
Все работает, как ожидалось, если вы не нажмете на кнопку в то время как компонент меняется от одного состояния к другому. После этого вещи начинают странствовать - некоторые компоненты, которые раньше исчезали, больше не исчезают. Другие больше не отображаются повторно
Я подозреваю, что это связано с тем, что переходы не выполняются должным образом, и поэтому свойства анимированных компонентов неправильно настроены на правильные значения.
Я пытался поставить в некоторых проверок, чтобы сказать, если состояние меняется (и, следовательно, отключить кнопку в то время как переходы играют), но только те события, я мог бы найти для прослушивания были
enterState
currentStateChange
currentStateChanging
все которые запускаются до завершения переходов.
Кто-нибудь знает какие-либо другие подходящие события для прослушивания или улучшения способа изменения состояния?
UPDATE:
Вот MXML я использую для переходов
<transitions>
<mx:Transition fromState="" toState="Transactional">
<mx:Sequence>
<mx:Parallel>
<mx:AnimateProperty target="{Controller}" property="y" fromValue="-60" toValue="-1" duration="600" />
<mx:AnimateProperty target="{Environment}" property="y" fromValue="156" toValue="46" />
<mx:AnimateProperty target="{ProfitAndLoss}" property="y" fromValue="156" toValue="126" />
<mx:AnimateProperty target="{Summary}" property="y" fromValue="156" toValue="56" />
<mx:AnimateProperty target="{Assets_Container}" property="x" fromValue="266" toValue="246" />
<mx:AnimateProperty target="{Liabilities_Container}" property="x" fromValue="425" toValue="505" />
<mx:Fade target="{TransactionalBackgroundImage}" alphaFrom="0" alphaTo="1" />
</mx:Parallel>
<mx:AnimateProperty target="{Summary}" property="x" fromValue="42" toValue="256" />
</mx:Sequence>
</mx:Transition>
<mx:Transition fromState="Transactional" toState="">
<mx:Sequence>
<mx:AnimateProperty target="{Summary}" property="x" fromValue="256" toValue="42" />
<mx:Parallel>
<mx:AnimateProperty target="{Controller}" property="y" fromValue="-1" toValue="-60" />
<mx:AnimateProperty target="{Environment}" property="y" toValue="156" fromValue="46" />
<mx:AnimateProperty target="{ProfitAndLoss}" property="y" toValue="156" fromValue="126" />
<mx:AnimateProperty target="{Summary}" property="y" toValue="156" fromValue="56" />
<mx:AnimateProperty target="{Assets_Container}" property="x" fromValue="246" toValue="266" />
<mx:AnimateProperty target="{Liabilities_Container}" property="x" fromValue="505" toValue="425" />
<mx:Fade target="{TransactionalBackgroundImage}" alphaFrom="0" alphaTo="0" />
</mx:Parallel>
</mx:Sequence>
</mx:Transition>
</transitions>
Привет, спасибо за ответ. Я определяю переходы в mxml, а не actioncript. Я опубликовал mxml для переходов. Я попробую теперь посмотреть, могу ли я вызвать метод end() для каждого из эффектов перед изменением состояния. Спасибо – Addsy
Это выглядит очень чистым для меня, за исключением последнего экземпляра Fade, который ничего не делает: alphaFrom = "0" alphaTo = "0". – Simon
ах возгласы! Спасибо что подметил это! К сожалению, предложенный вами метод означал, что переходы закончились раньше - я попробовал это, но силы, которые, как говорят, им нужно было закончить. Вы помещаете меня в пределах расстояния до решения. Существуют другие элементы, которые просто исчезают и появляются при изменении состояния, т. Е. Переход не устанавливает видимость false. Эти свойства обновляются немедленно, поэтому я могу использовать их для проверки того, было ли нормально выполнять другое изменение состояния. Поскольку я бы не нашел его без вашей помощи, я принял ваш ответ. Большое спасибо – Addsy