我试图用捏手势一次缩放多个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] 删除。
我来说两句