Actionscript 3 SWFLoader上的Actionscript 3和Flex 4缩放手势

Actionscript 3 SWFLoader上的Actionscript 3和Flex 4缩放手势,actionscript-3,flash,apache-flex,Actionscript 3,Flash,Apache Flex,我似乎对SWFLoader上的缩放手势有意见。我有一个swf文件,这是一个家庭的平面图,我希望用户能够放大和缩小两个手指触摸,下面的代码是我尝试了,但没有工作。当我在触摸屏上测试时,当我将两个手指放在SWF内并尝试放大时,它不会放大 <s:SWFLoader id="floorplanImage" source="@Embed('assets/test2.swf')" width="100%" height="100%" smoothBitmapContent="true" horizon

我似乎对SWFLoader上的缩放手势有意见。我有一个swf文件,这是一个家庭的平面图,我希望用户能够放大和缩小两个手指触摸,下面的代码是我尝试了,但没有工作。当我在触摸屏上测试时,当我将两个手指放在SWF内并尝试放大时,它不会放大

<s:SWFLoader id="floorplanImage" source="@Embed('assets/test2.swf')" width="100%" height="100%" smoothBitmapContent="true" horizontalAlign="center" />
请帮忙

更新

我走的是gestouch路线,但是有了这段代码,我无法放大或缩小SWF。对于常规图像,它可以正常工作,但SWF不能正常工作,除非我遗漏了什么。这是我的密码:

<mx:Script>
                <![CDATA[

                    import org.gestouch.events.GestureEvent;
                    import org.gestouch.gestures.TransformGesture;

                    private var _zoom:TransformGesture;

                    [Embed(source="assets/test2.swf")]
                    private var myClass:Class;
                    private var myMovieClip:MovieClip;


                    private function initModel():void
                    {   

                        myMovieClip = MovieClip(new myClass());
                        swfcontainer.addChild(myMovieClip);

                        _zoom = new TransformGesture(swfcontainer);
                        _zoom.addEventListener(org.gestouch.events.GestureEvent.GESTURE_BEGAN, onGesture);
                        _zoom.addEventListener(org.gestouch.events.GestureEvent.GESTURE_CHANGED, onGesture);

                    }

                    private function onGesture(event:org.gestouch.events.GestureEvent):void
                    {
                        const gesture:TransformGesture = event.target as TransformGesture;
                        var matrix:Matrix = swfcontainer.transform.matrix;

                        // Panning
                        matrix.translate(gesture.offsetX, gesture.offsetY);
                        swfcontainer.transform.matrix = matrix;

                        if (gesture.scale != 1)
                        {
                            // Scale and rotation.
                            var transformPoint:Point = matrix.transformPoint(swfcontainer.globalToLocal(gesture.location));
                            matrix.translate(-transformPoint.x, -transformPoint.y);
                            matrix.scale(gesture.scale, gesture.scale);
                            matrix.translate(transformPoint.x, transformPoint.y);

                            swfcontainer.transform.matrix = matrix;
                        }
                    }

                ]]>
            </mx:Script>

<mx:Image id="swfcontainer" horizontalAlign="center" width="100%" height="100%" />

当我将其用于常规图像时,它仍然不能正常工作…它在缩放时不能保持图像中心,它不允许我放大,只允许缩小,当我第一次使用它时,它会将图像向右移动。为什么这么难


请记住,我对Adobe Flex和Actionscript非常陌生,因此请尽可能清楚地回答。

您的代码没有问题,我将解释我为我的项目做了什么。也许这有帮助,我有一个窗口设计应用程序,我把SWF加载到starling中,出现了问题 具有缩放和平移功能

仅供参考:我使用starling并在starling和缩放平移工作中加载带有本机覆盖的SWF文件

   _mLoader = new Loader();
 var mRequest:URLRequest = new URLRequest("drawer.swf" + "?nf=" + getTimer());
_mLoader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, onCompleteHandler);
 _mLoader.load(mRequest);


     private function onCompleteHandler(loadEvent:flash.events.Event):void
    {
          _mLoader.contentLoaderInfo.removeEventListener(flash.events.Event.COMPLETE, 
           Starling.current.nativeOverlay.addChild(LoaderInfo(loadEvent.currentTarget).content);

    }
因为触摸flash的库很弱,所以我使用上面的库,这是非常强的

首先,在lib上面测试也许这是没有椋鸟的工作

我使用这个库的缩放代码

     var _zoom:
    _zoom = new TransformGesture(this);
    _zoom.addEventListener(GestureEvent.GESTURE_BEGAN, onGesture);
    _zoom.addEventListener(GestureEvent.GESTURE_CHANGED, onGesture);

private function onGesture(event:org.gestouch.events.GestureEvent):void 
    {

        const gesture:TransformGesture = event.target as TransformGesture;

        var matrix:Matrix = container_movieclip.transform.matrix;



        if (container_movieclip.scaleX!=1 || container_movieclip.scaleY!=1) 
        {
            matrix.translate(gesture.offsetX, gesture.offsetY);
            container_movieclip.transform.matrix = matrix;
        }

        if (gesture.scale != 1)
        {
            var transformPoint:Point = matrix.transformPoint(container_movieclip.globalToLocal(gesture.location));
            matrix.translate(-transformPoint.x, -transformPoint.y);
            matrix.scale(gesture.scale, gesture.scale);
            matrix.translate(transformPoint.x, transformPoint.y);
            container_movieclip.transform.matrix = matrix;

        }

    }

如果您将multiinputMethod更改为touchpoint,我希望我能帮助您解决问题

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;

嘿,我今天查看了这个库,我对AdobeFlex和ActionScript3还比较陌生,我正在努力理解它,这需要一些时间。使用这种方法时,是否只放大图像而不是整个舞台,并在放大和缩小时保持图像中心?此外,我可能正在使用png或svg或jpg,这种方法对这些人有效吗?是的,它的工作,我用这个库做了一些类似于您的项目的事情(放大和缩小时保持图像中心),并且肯定对png有效,但我没有尝试svg,它必须有效。GitHub中的示例和问题对我帮助很大,我在Adobe Flex项目中安装此项时遇到困难…我使用的是Adobe Flash Builder。第二行代码错误:
this关键字不能在静态方法中使用。它只能在实例方法、函数闭包和全局代码中使用。
此外,我还遇到了一些错误,例如访问未定义的属性\u zoom-访问可能未定义的属性_zoom。访问未定义的属性OnTesture。
Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;