アーカイブ

mx.states と戯れる #01

個人的な思いこみではありますが、ステートに馴染めないというか嫌いな方が多いのではないかと思い、回数を分けてまとめることにしました。もちろん MXML を使用しない方針で進めていきたいと思います。

今回は、まず基本説明から

  • UIComponent クラスには、states という配列プロパティが用意されており、この配列プロパティに対してステート情報( State クラスのインスタンス)を定義(追加)します。
  • ステート情報は、UIComponent クラスを継承しているアプリケーション/コンポーネントクラスのルート (this) に対して定義(追加)できます。
public function RootMXMLClass()
{
    …
    this.states = [StateInstanceA, StateInstanceB, StateInstanceC, … ];
}
  • ステート情報の内容は、State.overrides という配列プロパティに定義(追加)します。
  • State.overrides プロパティには、AddChild, RemoveChild などの mx.states パッケージクラスのインスタンスを定義(追加)することができます。( State, Transition クラスを除く)
  • State.name プロパティで定義した名前が RootMXMLClass.currentSate プロパティで利用されます。
public function RootMXMLClass()
{
    …
    var lState    :State    = new State();
    var lAddChild :AddChild = new AddChild();
    var lButton   :Button   = new Button();
    …
    lAddChild.target = lButton;
    lState.name = 'hoge';
    lState.overrides = [lAddChild, … ];
    this.states = [lState, … ];
}

以上のポイントさえ抑えてしまえば、AS で書いた方が可読性が高まり(個人的な意見ですが)、動的なステートが作成可能になるというメリットがオマケで付いてきます。 ただし、デザイナーと分業するようなプロジェクトでの使用はオススメできないという欠点もあるので、注意が必要です。(デザインビューでステートの確認ができなくなるため)