简体   繁体   English

As3 Pinch Zoom 图片从手势保持比例点

[英]As3 Pinch Zoom picture from point of gesture keeping ratio

I am using below code to Zoom In/Out + Panning from point of gesture, works great for X/Y zoom gestures together, but it lost ratio scale if you do only X or only Y.我正在使用下面的代码从手势点放大/缩小 + 平移,非常适合 X/Y 缩放手势,但如果你只做 X 或只做 Y,它会丢失比例比例。

It is just a single MC "largeImageContainer", easy to duplicate the issue on Touch and Gesture over animate.它只是一个单一的 MC“largeImageContainer”,很容易通过动画复制触摸和手势上的问题。

Any help will be really appreciated ;)任何帮助将不胜感激;)

import flash.events.TransformGestureEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
import fl.motion.MatrixTransformer;

Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
function onZoom(event: TransformGestureEvent): void {
    //trace(e.localX);
    var locX: Number = event.localX;
    var locY: Number = event.localY;
    var stX: Number = event.stageX;
    var stY: Number = event.stageY;
    var prevScaleX: Number = largeImageContainer.scaleX;
    var prevScaleY: Number = largeImageContainer.scaleY;
    var mat: Matrix;
    var externalPoint = new Point(stX, stY);
    var internalPoint = new Point(locX, locY);

    largeImageContainer.scaleX *= event.scaleX;
    largeImageContainer.scaleY *= event.scaleY;

    if (event.scaleX > 1 && largeImageContainer.scaleX > 6) {
        largeImageContainer.scaleX = prevScaleX;
        largeImageContainer.scaleY = prevScaleY;
    }

    if (event.scaleY > 1 && largeImageContainer.scaleY > 6) {
        largeImageContainer.scaleX = prevScaleX;
        largeImageContainer.scaleY = prevScaleY;
    }

    if (event.scaleX < 1.1 && largeImageContainer.scaleX < 1) {
        largeImageContainer.scaleX = prevScaleX;
        largeImageContainer.scaleY = prevScaleY;
    }

    if (event.scaleY < 1.1 && largeImageContainer.scaleY < 1) {
        largeImageContainer.scaleX = prevScaleX;
        largeImageContainer.scaleY = prevScaleY;

    }
    mat = largeImageContainer.transform.matrix.clone();
    MatrixTransformer.matchInternalPointWithExternal(mat, internalPoint, externalPoint);
    largeImageContainer.transform.matrix = mat;
}

largeImageContainer.addEventListener(MouseEvent.MOUSE_DOWN, f_begin);
largeImageContainer.addEventListener(MouseEvent.MOUSE_UP, f_end);
function f_begin(e: MouseEvent): void {
    largeImageContainer.startDrag();
}
function f_end(e: MouseEvent): void {
    largeImageContainer.stopDrag();
}

Actually this did it what i want ;) keeping the ratio since i am focusing on Y more than X.实际上这做到了我想要的 ;) 保持比例,因为我更关注 Y 而不是 X。

largeImageContainer.scaleX *= event.scaleY;
largeImageContainer.scaleY *= event.scaleY;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM