apache-flex Flex多点触控路径比例动态配准问题

gcmastyq  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(181)

有没有什么(直接的)方法可以解决flex中多点触摸缩放事件的动态注册问题?我就是想不明白。
我得到的是(在一些行和标签中)一个组中的路径,它本身被包裹在一个滚动条中;

<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组添加了一个eventListener:

scrollerContent.addEventListener(TransformGestureEvent.GESTURE_ZOOM, zoomEvent);

下面是ChristopheCoenraets为他的图表示例提供的代码(它实际上是根据x=0来缩放路径的;

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;
      }
}

我知道DynamicRegistration类,但无法使其正常工作,它仍然基于x=0点缩放路径。

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

任何有关这方面的帮助将不胜感激!

zzzyeukh

zzzyeukh1#

我使用了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);
}

或者使用原生flex方法:

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));
    }

相关问题