actionscript-3 - As3 Pinch 从手势保持比例点缩放图片
问题描述
我使用下面的代码从手势点放大/缩小+平移,非常适合 X/Y 缩放手势一起使用,但如果你只做 X 或只做 Y,它会丢失比例比例。
它只是一个单一的 MC “largeImageContainer”,很容易在 Touch 和 Gesture 上复制问题而不是动画。
任何帮助将不胜感激;)
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();
}
解决方案
实际上,这就是我想要的;)保持比例,因为我更关注 Y 而不是 X。
largeImageContainer.scaleX *= event.scaleY;
largeImageContainer.scaleY *= event.scaleY;
推荐阅读
- php - 防止在没有执行权限的情况下通过 readfile() 直接访问文件和服务
- javascript - 在单个 div 中堆叠两个嵌入式 SVG
- php - Laravel updateOrCreate 仅当列类型等于颜色时
- android - 如何让多个应用同时工作?
- php - 如何从 MySQL 数据库中按 ID 提取字段数据?
- c++ - ADT 和多态性
- javascript - 为什么提交后获取输入框的 .value 不起作用?
- python - scipy-optimize-minimize 最小化缺乏收敛性
- javascript - 使用 Json Schema 的构造函数、getter 和 setter 生成 Javascript 类
- apache-spark - 在pyspark中将一个数据帧的多列连接到另一个数据帧的单列,而无需多次连接操作