0

コンテナを取得した場合、その中に子表示オブジェクトがありました。コンテナーのサイズは、子供のサイズによって決定されました。サイズが変更されると、新しいサイズに合わせて何かをする必要があります。

それを検出するイベントの種類が見つからなかったので、ENTER_FRAME イベントを使用しますが、これは非常にばかげています。最後のフレームのサイズをすべて保持し、現在のフレームと比較します。おそらく、フレームに入るイベントを処理した後にサイズが変更されるため、場合によっては、次のフレームで正しい結果が表示されることがあります。

コンポーネントの良い解決策だとは思いません。アイデアをください、ありがとう。

4

2 に答える 2

2

これには標準的な解決策はありません。width/height/x/y/scaleX/scaleY/scrollRect .. およびその他のプロパティのセッターをオーバーライドするカスタム クラスを作成できます。子供たちはそのようなクラスを拡張する必要があります。

フレームの後にフラグがリセットされると、ブール値を使用して複数回ディスパッチされるのを防ぎました。

override public function set width(value:Number):void
{
    if (value !== super.width && !isNaN(Number(value)) this.dispatchResize();
    super.width = value;
}

override public function set height(value:Number):void
{ 
    if (value !== super.height && !isNaN(Number(value)) this.dispatchResize();
    super.height = value;
}

override public function set scaleX(value:Number):void
{ 
    if (value !== super.scaleX && !isNaN(Number(value)) this.dispatchResize();
    super.scaleX = value;
}

override public function set scaleY(value:Number):void
{ 
    if (value !== super.scaleY && !isNaN(Number(value)) this.dispatchResize();
    super.scaleY = value;
}

private var _hasDispatchedResize:Boolean;
protected function dispatchResize():void
{
   // do something
   if (!this._hasDispatchedResize)
   {
      this.dispatchEvent(new Event(Event.RESIZE));
      this._hasDispatchedResize = true;
      this.addEventListener(Event.ENTER_FRAME, handleEnterFrameOnce);
   }
}

private function handleEnterFrameOnce(event:Event):void
{
    this.removeEventListener(Event.ENTER_FRAME, handleEnterFrameOnce);
    this._hasDispatchedResize = false;
}

これで、コンテナー クラスで、子の をリッスンできますEvent.RESIZE。値が実際に変更されたかどうかはよくわかりませんが (ムービークリップのフレーム変更の場合)、ほとんどの場合はこれでうまくいきます。サイズ変更をディスパッチする前に、このセッター内に追加のチェックを追加しました。これがあなたのケースに合うかどうかは、ケースによって異なります。

于 2012-10-16T06:27:54.960 に答える
0

私がすることは、子のサイズを変更する関数が何であれ、サイズの変更が発生したことをブロードキャストする独自のディスパッチイベントを追加することです。

//Never forget to import your classes.
import flash.events.EventDispatcher;
import flash.events.Event;

//Our custom listener listens for our custom event, then calls the function we
//want called when children are resized.
addEventListener("childResized", honeyIResizedTheChildren);

function resizingLikeFun(){
    datClip.width++;//they be resizin, yo.
    dispatchEvent(new Event("childResized"));//Our custom event
}

function honeyIResizedTheChildren(e:Event){
    trace("Giant Cheerios");
    //Whatever you want to do when the children are resized goes here.
}

私はそのコードでいくつかのことを想定しているので、これがあなたに完全に当てはまらない場合は私に知らせてください。

于 2012-10-16T04:46:56.137 に答える