質問

私は唯一の3つのオプションで、シンプルなスライダーを持っています。スライダーの横に3つの実際のラベルの1つをクリックしてはるかに容易になる際に、スライダー上に小さなサムネイルをドラッグして、ユーザーを強制的に奇妙なようです。誰もがこれを実現する方法を知っていますか?

役に立ちましたか?

解決

これはクールな問題があります。

スライダーによって使用されるラベルオブジェクトは、(SliderLabel呼ばれる)ラベルのサブクラスであることが判明しました。だから、おそらく最善のアプローチは、スライダーをサブクラス化し、ラベルにイベントリスナーを追加することです。

私は、あなたが正常にcommitPropertiesメソッドまたはにupdateDisplayListメソッドのいずれかにイベントリスナーを追加することができると思います。私は、一方が他方よりも好ましいだろうかどうかわからないんだけど、のcommitPropertiesは、のよりの正しい選択のように思える。

だから、スライダーのサブクラスでます:

override protected function commitProperties():void
{
    super.commitProperties();

    for(var i:int = 0; i < labelObjects.numChildren; i++)
    {
        if(!SliderLabel(labelObjects.getChildAt(i)).hasEventListener(MouseEvent.CLICK))
        {
            SliderLabel(labelObjects.getChildAt(i)).addEventListener(MouseEvent.CLICK,sliderLabelClickListener);
        }
    }
}

と多分sliderLabelClickListenerため、このような何かます:

private function sliderLabelClickListener(e:MouseEvent):void
{
    dispatchEvent( new SliderLabelClickEvent(e.target) );
}

私はあなたがラベルの名前/ ID /値を含めることができるようにあなたは、むしろ通常のEventを派遣するよりも、そこにカスタムイベントをしたいと思う。

また、あなたはスライダーがステージから削除されたときに、ラベルからclickイベントリスナーを削除するには「処分」メソッドに置きたいと思うことがあります。それはあなたがスライダーを削除するつもりされていない場合は問題ではないのですが、あなたがしている場合、私は正常にやっていることはdisposeというメソッドを作成し、そこにすべての私の手動で削除ロジックを置く(イベントリスナーを削除し、/ ChangeWatchersを取り除くunwatching)です。それから私は、コンポーネントのREMOVED_FROM_STAGEイベントにリスナーを割り当て、そのリスナーからdisposeメソッドを呼び出します。

他のヒント

あなたはスライダーが、この場合に使用するのに最適な構成要素であることを確認していますか?一般的に言って、スライダーは、ユーザーがユーザーの選択の精度が本当に問題ではないから選択する連続したオプションの大規模な範囲を持っているときに使用される(例えばボリュームスライダー - 50%とは対照的に、51%の体積を有します実際に)違いの多くをすることはありません。

あなたが唯一の3つのオプションがあり、ユーザーが唯一の私は、コンボボックスやラジオボタングループのいずれかを使用することをお勧めし、これらの3つのオプションのいずれかを選択することが許可されている場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top