在视图旋转后移动视图,视图中的触摸位置错误

时间:2018-01-06 03:12:06

标签: swift rotation swift4 cgaffinetransform touchmove

我有一个目标视图(蓝色视图和红色视图用于左上角位置)。我试图用手指移动这个视图。如果视图不旋转,一切都很好。 enter image description here 但是当我旋转视图并移动时,第一次就可以了。但从第二次开始,视角从手指位置反弹是很奇怪的。 enter image description here

我正在使用连接来组合变换。

targetView.transform = CGAffineTransform(translationX: touchPosition.x, y: touchPosition.y).concatenating(CGAffineTransform(rotationAngle:radian))

我不熟悉变形,数学不是我的好。旋转真的会影响翻译(移动)吗?还是我误解了什么?如何解决?

2 个答案:

答案 0 :(得分:0)

您可以使用anchorPoint上的CALayer更改视图将围绕其转动的点。

view.layer.anchorPoint = CGPoint(0.5, 0.5)

You can read more about this property here.

答案 1 :(得分:0)

根据Apple的说法,如果要移动UIView,则不应应用转换。相反,您需要移动视图的中心点。

因此,您需要做的是在PanGesture开始时保存视图的center,然后将center移动PanGesture的平移点。尝试这样的事情:

if sender.state == .began {
    panGestureStartLocation = view.center
} else {
    let translation = sender.translation(in: view)
    view.center = CGPoint(x: panGestureStartLocation.x + translation.x, y: panGestureStartLocation.y + translation.y)
}