为什么这个Flex 4 Transition无法正常工作?

时间:2011-05-17 14:58:14

标签: flex flex4 mxml flex-spark

我有一个测试应用程序here,它是使用以下代码制作的:

<fx:Script>
    <![CDATA[

            public function comboBoxHandler():void{
                var selectedItem:String = showComboBox.selectedItem;

                if(selectedItem == "All results"){
                    currentState = "default";
                    return;
                }else if(selectedItem == "Only results within tags"){
                    currentState = "tagInput";
                    return;
                }
            }

    ]]>
</fx:Script>    
<s:states>
    <s:State name="default"/>
    <s:State name="tagInput"/>
</s:states>
<s:transitions>
    <s:Transition id="showTagTextInput" fromState="default" toState="tagInput">
        <s:Sequence id="t1p1" targets="{[tagsLabel,tagsTextInput,GoButton]}">

            <s:Move  duration="700"/>
            <s:Fade  duration="400"/>

        </s:Sequence>
    </s:Transition>
    <s:Transition id="hideTagTextInput" fromState="tagInput" toState="default">
        <s:Sequence id="t2p1" targets="{[tagsLabel,tagsTextInput,GoButton]}" >

            <s:Fade  duration="400"/>
            <s:Move  duration="700"/>

        </s:Sequence>
    </s:Transition>

</s:transitions>

<s:Label x="136" y="13" width="120" height="34" fontFamily="Arial" fontSize="15"
             text="Lessons&#xd;Learnt" textAlign="center"/>

    <s:Group id="group" width="100%" height="100%"
             x.default="0" y.default="55" width.default="400" height.default="231"
             y.tagInput="55" height.tagInput="256">
        <s:Label x="45" y="38" width="50" height="22" text="Search" textAlign="center"
                 verticalAlign="middle"/>
        <s:TextInput x="103" y="38" width="193"
                     useHandCursor.tagInput="false"/>
        <s:Label x="45" y="89" width="51" height="22" text="Show" textAlign="center"
                 verticalAlign="middle"/>
        <s:Button id="GoButton" x="253" y="137" width="43" label="Go" useHandCursor="true"
                  buttonMode="true" mouseChildren="false"
                  x.tagInput="254" y.tagInput="188"/>
        <s:DropDownList id="showComboBox" x="104" y="89" width="192" change="comboBoxHandler();"
                    selectedIndex="0">
            <s:ArrayCollection>
                <fx:String>All results</fx:String>
                <fx:String>Only results within tags</fx:String>
            </s:ArrayCollection>
        </s:DropDownList>
        <s:Label id="tagsLabel" includeIn="tagInput" x="104" y="146" width="61" height="20" text="Tags"
                 textAlign="center" verticalAlign="middle"/>
        <s:TextInput id="tagsTextInput" includeIn="tagInput" x="173" y="146" width="123"/>

    </s:Group>

您可以通过点击我提供的链接来检查,当您从DropDownBox 中选择不同的选项时,此应用会执行一些基本的过渡效果

第一个(显示)转换不能很好地工作,但第二个(隐藏)转换确实如此。

有谁知道如何解决这个问题?在第一次转换中,我希望按钮向下滑动第一个,只有在此之后文本输入才会淡入。 为什么这不起作用?

提前致谢。

2 个答案:

答案 0 :(得分:2)

最好指出特定效果目标,而不是将所有目标指向<s:Sequence />。因此,请将目标设置为<s:Move /><s:Fade />。您还可以通过将<s:AddAction /><s:RemoveAction />与相应的目标放在一起来指定序列中的位置,转换应该调用includeInexcludeFrom状态声明来执行其他转换调整。

因此,这些转换适用于您的代码:

<s:transitions>
    <s:Transition fromState="default" id="showTagTextInput" toState="tagInput">
        <s:Sequence id="t1p1">
            <s:Move duration="700" targets="{[GoButton]}" />
            <s:AddAction targets="{[tagsLabel,tagsTextInput]}" />
            <s:Fade duration="400" targets="{[tagsLabel,tagsTextInput]}" />
        </s:Sequence>
    </s:Transition>
    <s:Transition fromState="tagInput" id="hideTagTextInput" toState="default">
        <s:Sequence id="t2p1">
            <s:Fade duration="400" targets="{[tagsLabel,tagsTextInput]}" />
            <s:RemoveAction targets="{[tagsLabel,tagsTextInput]}" />
            <s:Move duration="700" targets="{[GoButton]}" />
        </s:Sequence>
    </s:Transition>
</s:transitions>

答案 1 :(得分:1)

我想象一下,因为你的标签输入只包含在tagInput状态,但alpha是100%,并且状态之间没有转换。试试这个:

<s:Label id="tagsLabel" alpha.default="0" alpha.tagInput="100" x="104" y="146" width="61" height="20" text="Tags" textAlign="center" verticalAlign="middle"/>
<s:TextInput id="tagsTextInput" alpha.default="0" alpha.tagInput="100" x="173" y="146" width="123"/>

您可能还希望在默认情况下将可见设置为false。州。康斯坦纳说的也是如此。