缩放UIViews组,但保持其位置

拉梅什·维尔

我试图用捏手势一次缩放多个UIView(在基本视图上)。尽管看起来很简单,但我仍然很难使其正常工作。

假设我有3个这样堆叠的视图

----------------------------------------------
|                                            |
|    -------                      --------   |   
|    |     |                      |      |   |
|    |  V1 |   ---------------    |      |   |
|    |     | X |     v2      |  Y |   v3 |   |
|    -------   ---------------    |      |   |
|                                 --------   |
---------------------------------------------

紧要关头,我正在通过使用比例属性计算转换来缩放3个视图中的每个视图

CGAffineTransform v1Transform =  CGAffineTransformScale( v1.transform,recognizer.scale, recognizer.scale);
v1.transform = v1Transform
CGAffineTransform v2Transform =  CGAffineTransformScale( v2.transform,recognizer.scale, recognizer.scale);
v2.transform = v2Transform
CGAffineTransform v3Transform =  CGAffineTransformScale( v3.transform,recognizer.scale, recognizer.scale);
v3.transform = v3Transform

然后使用当前比例更改每个视图的中心

   CGPoint v1Center = CGPointMake(v1.center.x * recognizer.scale,  node.imgView.center.y * recognizer.scale);
   CGPoint v2Center = CGPointMake(v2.center.x * recognizer.scale,  node.imgView.center.y * recognizer.scale);
   CGPoint v3Center = CGPointMake(v3.center.x * recognizer.scale,  node.imgView.center.y * recognizer.scale);
  v1.cente = v1Center;
  v2.center = v2Center;
  v3.center = v3Center;

尽管这会均匀缩放3个视图中的每个视图,但我觉得中心点太偏了,缩放看起来很奇怪。请检查以下问题的屏幕截图

在此处输入图片说明

如您所见,尽管比例尺按预期方式工作,并且所有3个视图一起缩放。中心仍然是一个问题。我希望从所有3个视图的实际位置完成缩放,我不希望它们在gif中这样移动。

有办法吗?任何帮助深表感谢

埃米利奥·佩莱兹

如果我理解正确,则在缩放一组元素时希望具有通常的行为,即使它们从所有选定元素的中心缩放。

我之前已经做过,它在Swift中,它使用了我制作的一个名为CGMath *的库的扩展,但是作为伪代码应该足够好:

let scale = recognizer.scale
//  Reset the scale of the recognizer. We'll scale the views by the change in the last tick.
recognizer.scale = 1
//  Get the center of all selected views as a CGPoint
let center = views.map { $0.center }.reduce(CGPoint.zero, +) / CGFloat(views.count)
views.forEach {
    //  Scale the view
    $0.scale *= scale
    //  Get the distance from this view to the center of all views, this is a CGPoint
    let distance = $0.center - center
    //  Multiply the distance by the scale and add it to the center of all views. Set that as the view's center.
    $0.center = center + (distance * scale)
}

* CGMath中的扩展名使加减点成为可能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将元素缩放到父高度,保持其比例,但保持其相对位置

如何旋转svg组并保持其相对位置?

缩放水平布局组的子布局元素,同时保持其纵横比

我可以使不居中的UILabel相对于要缩放的UIImageView保持其位置吗?

我如何在保持其midXmidY位置的同时缩放SVG线

如何转换 uilabel 保持其 x 位置不变并缩放以减小字体大小

Fabric.js:重新缩放组时保持对象位置固定

如何使iframe保持其位置?

缩放子元素的位置,但不缩放其大小?

Libgdx缩放动作,保持居中位置

传单:如何缩放保持位置固定?

如何缩放容器保持其右下角固定?

如何在保持其大小的同时放大缩放图像?

如何使图像可缩放并同时保持其纵横比?

图片框内的图像无法保持其缩放比例

缩放div而不更改其子元素的大小和位置

KineticJs:如何缩放图像并保持所连接容器的位置?

缩放div,使其始终保持其长宽比并保持居中

在鼠标位置缩放/缩放

如何翻译视图,但保持其原始起始位置

PHP重命名对象属性,同时保持其位置

水平翻转SVG中的元素,但保持其原始位置

调整大小时如何使div保持其位置?

交换位置UIViews Xcode

如何缩放kivy切换按钮的图像并保持其长宽比?

对于所有缩放级别,将文本标签保持在与主轴相同的相对 x 位置,同时保持绝对 y 位置

fabricjs在其他元素缩放时如何保持组元素的固定大小?

悬停时的CSS / SVG缩放效果导致图像从其位置移动

如何缩放对象并更改位置以保持一个固定点