2010-01-11 4 views
0

У меня есть гибкий компонент с 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> 

ответ

1

В currentState свойство изменяется мгновенно, я уверен, что это переходы, которые вызывают проблемы (там, сделанный что ;-). Если вы нажимаете слишком быстро, у вас есть два одновременно работающих эффекта, изменяющих один и тот же набор значений, что дает неопределенный результат. Кроме того, effectEnd обработчики событий на ваших эффектах будут стрелять в середине другого эффекта. Вы можете попробовать метод end() в своих экземплярах эффекта, чтобы немедленно прекратить действие перед запуском следующего, это также устанавливает все атрибуты в их конечные значения и триггеры effectEnd. Если это не поможет, можете ли вы опубликовать часть своего кода эффекта?

+0

Привет, спасибо за ответ. Я определяю переходы в mxml, а не actioncript. Я опубликовал mxml для переходов. Я попробую теперь посмотреть, могу ли я вызвать метод end() для каждого из эффектов перед изменением состояния. Спасибо – Addsy

+0

Это выглядит очень чистым для меня, за исключением последнего экземпляра Fade, который ничего не делает: alphaFrom = "0" alphaTo = "0". – Simon

+0

ах возгласы! Спасибо что подметил это! К сожалению, предложенный вами метод означал, что переходы закончились раньше - я попробовал это, но силы, которые, как говорят, им нужно было закончить. Вы помещаете меня в пределах расстояния до решения. Существуют другие элементы, которые просто исчезают и появляются при изменении состояния, т. Е. Переход не устанавливает видимость false. Эти свойства обновляются немедленно, поэтому я могу использовать их для проверки того, было ли нормально выполнять другое изменение состояния. Поскольку я бы не нашел его без вашей помощи, я принял ваш ответ. Большое спасибо – Addsy

Смежные вопросы