Flex: содержимое не отображается правильно после изменения состояния перехода - PullRequest
0 голосов
/ 01 марта 2012

У меня есть компонент с 2 состояниями, и я добавил переходы для переключения между состояниями, где 2 эффекта Move применяются к 2 различным объектам.Это все работает нормально, однако после того, как переход из первого состояния во второе завершен, второе состояние не отображается правильно.Он содержит элемент управления TextInput, который не отображается, и кнопку с пользовательским скином, который виден только иногда и исчезает при нажатии на него.Я попытался вызвать invalidateDisplayList () и validateNow () после загрузки второго состояния, но это ничего не сделало.У меня также есть VBox с установленным свойством cornerRadius, как ни странно, это, кажется, больше не применяется, и углы являются квадратными, где они отображались правильно, прежде чем я добавил переход. У кого-нибудь есть какие-нибудь идеи?!

Вот код для моих состояний и их переходов:

<!-- different states of this component -->
<mx:states>
    <s:State name="useForFree"
             enterState="renderState()"/>
    <s:State name="enterLicence"
             enterState="renderState()"/>
</mx:states>


<!-- transitions between different states -->
<mx:transitions>

    <!-- transition from useForFree to enterLicence state -->
    <s:Transition id="toEnterLicence"
                  fromState="useForFree"
                  toState="enterLicence">
        <s:Parallel id="p1"
                    targets="{[freeBtn, _enterLicenceMask]}">               
            <s:Move yFrom="250"
                    yTo="0"
                    duration="500"
                    targets="{[freeBtn]}"/>
            <s:Move yFrom="289"
                    yTo="39"
                    duration="500"
                    targets="{[_enterLicenceMask]}"/>
        </s:Parallel>       
    </s:Transition>

    <!-- transition from enterLicence to useForFree state -->
    <s:Transition id="toUseForFree"
                  fromState="enterLicence"
                  toState="useForFree">
        <s:Parallel id="p2"
                    targets="{[enterLicenceBtn, _useForFreeMask]}">             
            <s:Move yFrom="0"
                    yTo="240"
                    duration="500"
                    targets="{[enterLicenceBtn]}"/>
            <s:Move yFrom="-250"
                    yTo="0"
                    duration="500"
                    targets="{[_useForFreeMask]}"/>
        </s:Parallel>       
    </s:Transition>
</mx:transitions>

, а вот код для моего макета:

<mx:Canvas id="freeStateCanvas"
           width="100%">

    <mx:VBox width="100%"
             horizontalAlign="center"
             top="0"
             mask="{_useForFreeMask}">

        <mx:VBox id="freeBox"
                 includeIn="useForFree">
            <s:Label text="some text"/>
            <s:Spacer height="20"/>
            <s:Image source="image path"/>
            <s:Spacer height="20"/>
            <mx:Button id="connectBtn"/>
            <s:Spacer height="10"/>
            <mx:HBox >
                <s:Label text="some text"/>/>
            </mx:HBox>
        </mx:VBox>

        <s:Label text="some text"
                 includeIn="useForFree"/>           
    </mx:VBox>

        <mx:Button id="enterLicenceBtn"
                   includeIn="useForFree"/>

</mx:Canvas>

<!-- enter licence state -->

<mx:Canvas id="enterLicenceStateCanvas"
           width="100%">

        <mx:VBox id="enterLicenceBox"                    
                 mask="{_enterLicenceMask}"
                 includeIn="enterLicence">

            <s:Label text="some text"/>
            <s:Spacer height="20"/>
            <s:TextInput id="licenceInput"
                         width="200"
                         height="30"/>
            <s:Spacer height="20"/>
            <mx:Button id="registerBtn"/>
            <s:Spacer height="10"/>
            <mx:HBox>
                <s:Label text="some text"/>
                <s:Label text="some more text"/>
            </mx:HBox>
        </mx:VBox>

        <mx:Button id="freeBtn"
                   includeIn="enterLicence"/>

</mx:Canvas>

, где задаются переменныеМаски - это экземпляры UIComponent, в которых я использовал их графическое свойство для рисования прямоугольника.

1 Ответ

0 голосов
/ 02 марта 2012

Хорошо, я обнаружил, в чем проблема, но спасибо за попытку помочь Шонхусейну.

В моем коде вы можете видеть, что у меня есть 2 контейнера VBox с именами «freeBox» и «enterLicenceBox», и у них фактически был белый фон и закругленные углы, и к ним применен DropShadowFilter (я удалил эти свойства прикод, как я чувствовал, они не имеют значения, это было ошибкой).

Этот DropShadowFilter стал причиной всех моих проблем, и при его удалении переходы работали нормально, и все содержимое отображалось правильно.Я предполагаю, что это просто странная ошибка Flex, и я не нашел обходного пути, я просто использовал изображения в качестве фона для быстрого исправления.

...