2011-12-28 17 views
1

フレックスのマルチタッチのスケーリングイベントの動的登録の問題を解決する方法はありますか?私はちょうどこれの周りに私の頭を包むことはできません。フレックスマルチタッチパネルスケールの動的登録の問題

私は、(いくつかの行とラベルのなかで)自分自身がスクロールでラップされているグループ内のパスを取得しています。

<s:Scroller id="scroller"> 
    <s:Group id="scrollerContent"> 

    <s:Path id="path"> 
     <s:stroke> 
      <s:SolidColorStroke color="#ffffff" weight="2"/> 
     </s:stroke> 
     </s:Path> 
    </s:Group> 
</s:Scroller> 

私は何をしたいのですが、パス(とscrollerContentグループ内の他のもの)上でのズームイン、ズームアウトすることがあるので、私のcreationComplete()メソッド私はscrollerContentグループにイベントリスナーを追加しました:ここ

scrollerContent.addEventListener(TransformGestureEvent.GESTURE_ZOOM, zoomEvent); 

は、x = 0しかしに基づいて、実際にパスをスケーリングないクリストフCoenraetsは彼チャート例えば提供されたコード(ある; IはDynamicRegistrationクラスの認識だ

private function zoomEvent(e:TransformGestureEvent):void 
{ 
    zoom(e.scaleX, e.scaleY); 
} 
protected function zoom(scaleX:Number):void 
{ 
    var w:Number = path.width * scaleX; 
    if (scaleX>1) 
     path.width = w > width*5 ? width*5 : w; 
    else 
    { 
      path.width = w < width ? width : w; 
      if (path.x + path.width < width) path.x = width - path.width; 
     } 
} 

、正しく動作させることはできませんが、x = 0ポイントに基づいてパスの縮尺を変えます。

DynamicRegistration.scale(scrollerContent, new Point(e.localX, e.localY), scrollerContent.scaleX*= e.scaleX, scrollerContent.scaleY=1); 

これについての助けがあれば幸いです!

+0

、誰もこれを直面しないました問題?または、任意の点でチャートをズームする簡単な方法はありますか? GestureWorksにはこのためのAPIが用意されていますが、可能であれば、経験豊富なFlex/AS3デベロッパーにとってこの登録が大したことではないと思うので、ライセンスの購入を避けたいと思います。 – AlBirdie

答えて

1

私はDynamicRegistrationクラスを使用して、あなたはまだ興味があるなら、それは、次のように働いてしまった:

protected function onZoom(e:TransformGestureEvent, img:Image):void 
{ 
    DynamicRegistration.scale(img, new Point(e.localX, e.localY), img.scaleX*e.scaleX, img.scaleY*e.scaleY); 
} 

またはネイティブフレックス方法で:

protected function onZoom(e:TransformGestureEvent, img:Image):void 
    { 
    img.transformAround(new Vector3D(e.localX, e.localY, 0), new Vector3D(img.scaleX*e.scaleX, img.scaleY*e.scaleY, 0)); 
    } 
関連する問題