0

我有一个目标视图(蓝色视图和红色视图用于左上角)。我试图用手指移动这个视图。如果视图不旋转,一切都很好。 在此处输入图像描述 但是当我旋转视图并移动时,第一次很好。但是从第二次开始,从手指位置弹回视图就很奇怪了。 在此处输入图像描述

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

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

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

4

2 回答 2

0

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

因此,您需要做的是center在 PanGesture 开始时保存 View 的 ,然后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)
}
于 2019-09-02T09:50:33.317 回答
0

anchorPoint您可以使用on更改视图将围绕其旋转的点CALayer

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

您可以在此处阅读有关此属性的更多信息。

于 2018-01-06T10:50:26.353 回答