Государственные переходы во Flex - PullRequest
0 голосов
/ 11 января 2010

У меня есть компонент 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 Ответ

1 голос
/ 11 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...