2009-06-18 26 views
1

私はフレキシブルな新人です。既存のアプリケーションを強化することを任されています。これらの機能拡張の1つは、現在、時間と日付の表示の間を行き来するようにスムーズにフェードする時間を示すフィールドを取得することです。フレックスエフェクトが完了するのを待つ

これを行う適切な方法は、アプリケーションにフォントファイルを埋め込むことです。そのため、ラベルを直接フェードインまたはフェードアウトすることができます。できれば私はできるだけ邪魔にならないようにしたいと思っています。

私は、妥当な回避策だと思いました。時計の背景の正確なサイズ、形、色と同じように起こる「プライバシー画面」を作成してください。そのアルファを0に初期化する。時刻/日付を変更するときは、プライバシー画面をフェードインして変更し、画面を再びフェードアウトさせます。

コードは、このようなものになります。私は経験豊富なFlexの設計者が既に知っていると確信しているように、このコードは、


<mx:Label text="" id="mylabel" width="100%" height="100%" x="0" y="0" color="0xff0000"/> 
<mx:Canvas id="privacyScreen" width="100%" height="100%" x="0" y="0" alpha="1" backgroundColor="{myConfiguration.backgroundColor}"/> 
<mx:Fade id="effectFadeIn" alphaFrom="0.0" alphaTo="1.0" duration="250"/> 
<mx:Fade id="effectFadeOut" alphaFrom="1.0" alphaTo="0.0" duration="250"/> 

:このように見て重要なコンポーネントと


    var targets:Array = new Array(); 
    targets.push(this.privacyScreen); 
    this.effectFadeIn.play(targets); 
    this.mylabel.text = "I am a date and/or time"; 
    this.effectFadeOut.play(targets); 

を...おいしい新鮮な絞ったFAILから作られています。実行がフェードイン効果を終了するのを待つという基本的な仮定は間違っており、フェードインがまだ進行中の間は明らかに無視されます。

だから、私は二つの関連質問があると思います:

  1. が完了するまで実行する効果を待っている間に一時停止し、実行を取得することが可能ですか?
  2. この方法も有効ですか、それともDoing Itを上から下に間違えてしまうのですか?

誰もが提供できる洞察に感謝します。

(そして、私はより多くの私が行うことによって、これを学ぼうと、より多くの私はそこにオンラインtrainingresourcesのいくつかの自分自身を利用するために必要実現することを事前に認める。)

答えて

2

私はちょうどあなたのコードでビットを果たし、これはあなたが探しているものでしょうか?

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    creationComplete="onComplete();"> 

    <mx:Script> 
     <![CDATA[ 
      private var targets:Array = new Array(); 
      private function onComplete():void { 
       targets.push(canv); 
       effectFadeOut.play(targets); 
      } 
      private function onFadeInEnd():void { 
       effectFadeOut.play(targets); 
      } 
      private function onFadeOutEnd():void { 
       effectFadeIn.play(targets); 
      } 
     ]]> 
    </mx:Script> 

    <mx:Label text="{(new Date()).toString()}" id="lbl" x="0" y="0" color="0xff0000"/> 
    <mx:Canvas id="canv" width="100%" height="{lbl.height+5}" x="0" y="0" backgroundColor="#000000"/> 

    <mx:Fade id="effectFadeIn" alphaFrom="0.0" alphaTo="1.0" duration="250" 
     effectEnd="onFadeInEnd();" /> 
    <mx:Fade id="effectFadeOut" alphaFrom="1.0" alphaTo="0.0" duration="250" 
     effectEnd="onFadeOutEnd();" /> 

</mx:WindowedApplication> 

それはほとんど動作します:)

+0

ああ! "effectEnd"パラメータは、これを取り除くために必要なメカニズムでした。このサンプルコードは、概念を非常にきれいに示しています。あなたは感謝しています。 – BlairHippo

+0

あなたの投稿は本当に私に本当の悲しみを惜しみませんでした。ありがとう! – noogrub

1

あなたのコードが実行されますラベルがフェードします。 this.effectFadeIn.play()は完了するのを待機しません。後で呼び出す必要があるコード行にsetTimeout呼び出しを追加するか、または別の関数に配置することをお勧めします。その後、一定間隔後に関数を再度呼び出します。私は、これは動作するはずかなり確信している

import flash.utils.*; 

private function FadeIn() : void { 
    var targets:Array = new Array(); 
    targets.push(this.privacyScreen); 
    this.effectFadeIn.play(targets); 
    this.mylabel.text = "I am a date and/or time"; 
    setTimeout (function(): void {FadeOut (targets);}, effectFadeIn.duration); // Function and duration 
} 
private function FadeOut (targets : Array) : void { 
    this.effectFadeOut.play(targets); 
    setTimeout (FadeIn(), this.effectFadeOut.duration; 
} 

...

+0

に役立ちます願っています。私が撮影したものを達成するために少し微調整が必​​要です。なぜなら、プライバシー画面が消えた後にテキストを変更したいからです。テキスト変更をFadeOut関数に移動するだけです。私はradekgの回答を受け入れました。なぜなら、私にとってもっとエレガントで、私が他の場所で読んだことに基づいて、AdobeはsetTimeout機能を非難しようとしていたように見えます。とにかく助けを+1してください。これは完全に機能的なソリューションの中核です。:-) – BlairHippo

+0

Flexでエフェクトを使用したことはありませんでしたが、これは私の頭の上から外れていました:-)私はJavascriptの世界からも来ています。これがJSでやる方法です。 – Aethex

関連する問題