これには標準的な解決策はありません。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
。値が実際に変更されたかどうかはよくわかりませんが (ムービークリップのフレーム変更の場合)、ほとんどの場合はこれでうまくいきます。サイズ変更をディスパッチする前に、このセッター内に追加のチェックを追加しました。これがあなたのケースに合うかどうかは、ケースによって異なります。