通过状态更改检测何时显示或隐藏Spark组件

| 我有一个Spark组件,可以在可见时(通过计时器)运行一些动画。 该组件应该: 隐藏计时器时暂停计时器 当计时器再次显示时,恢复计时器。 。
<!-- RandomButton.mxml-->
<?xml version=\"1.0\"?>
<s:Button xmlns:fx=\"http://ns.adobe.com/mxml/2009\"
          xmlns:s=\"library://ns.adobe.com/flex/spark\"
          creationComplete=\"start()\">
    <fx:Script><![CDATA[
        public var ticker:Timer = new Timer(1000, 0)

        private function start():void {
            ticker.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
                label = \'\' + Math.random()
            })
        }
    ]]></fx:Script>
</s:Button>
以下是使用enterState + exitState实现目标的方法:
<!-- Main.mxml -->
<?xml version=\"1.0\" ?>
<s:Application
        xmlns:fx=\"http://ns.adobe.com/mxml/2009\"
        xmlns:s=\"library://ns.adobe.com/flex/spark\"
        xmlns=\"*\">
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>

    <s:states>
        <s:State name=\"STATE_1\"
                 enterState=\"b.ticker.start()\"
                 exitState=\"b.ticker.stop()\"/>
        <s:State name=\"STATE_2\"/>
    </s:states>

    <s:Button label=\"STATE_1\" click=\"currentState=\'STATE_1\'\"/>
    <s:Button label=\"STATE_2\" click=\"currentState=\'STATE_2\'\"/>

    <RandomButton id=\"b\" includeIn=\"STATE_1\"/>
    <s:Label text=\"Debug: {b.label}\"/>

</s:Application>
单击STATE_2按钮后,计时器停止-您可以看到\'debug \'标签也停止了。 您可以看到,RandomButton需要一些外部“协助”来解决其内部问题。这意味着将enterState / exitState复制到将要使用RandomButton的任何位置。真是可悲。 问题 我希望RandomButton自己保持其状态。像这样:
<!-- Main.mxml -->
...
    <s:states>
        <s:State name=\"STATE_1\"/><!-- no need to poke inside the RandomButton -->
        <s:State name=\"STATE_2\"/>
    </s:states>
...

<!-- RandomButton.mxml -->
<?xml version=\"1.0\"?>
<s:Button xmlns:fx=\"http://ns.adobe.com/mxml/2009\"
          xmlns:s=\"library://ns.adobe.com/flex/spark\"
          creationComplete=\"start()\"

          whenShown=\"ticker.start()\"
          whenHidden=\"ticker.stop()\" >
    ...
</s:Button>
属性whenShown和whenHidden不存在。这些只是一个愿望。 注意:有显示和隐藏属性,但是它们处理可见属性(无论状态如何变化,该属性均保持设置为true)。     
已邀请:
        解决方法如下:
<!-- RandomButton.mxml -->
<?xml version=\"1.0\"?>
<s:Button xmlns:fx=\"http://ns.adobe.com/mxml/2009\"
          xmlns:s=\"library://ns.adobe.com/flex/spark\"

          addedToStage=\"ticker.start()\"
          removedFromStage=\"ticker.stop()\"
    ...
</s:Button>
    

要回复问题请先登录注册