(Swift 4)使用UIPanGestureRecognizer旋转视图但位置错误

时间:2017-10-30 15:41:37

标签: ios rotation uipangesturerecognizer

我有一个容器UIView和一个位于容器右上方的按钮,当我旋转按钮时,我想让容器按角度旋转。但代码不能正常工作  只是快速旋转。

   @objc func btnRotatePanAction(sender: UIPanGestureRecognizer) {
    switch sender.state {
    case .began:
        origin = sender.location(in: self)
        break
    case .changed:
        let second = sender.location(in: self)
        let dx = second.x - origin.x
        let dy = second.y - origin.y
        let radians = atan2(dy, dx); // get bearing in radians
        print("rads: \(radians)")
        container.transform = container.transform.rotated(by: CGFloat(radians))
        origin = second
        break
    case .ended:
        break
    default: break

    }
}

记录输出如下:

rads:1.69022525281324

rads:0.519146114246523

rads:0.643501108793284

1 个答案:

答案 0 :(得分:0)

您是否转换了将UIPanGestureRecognizer应用于的相同视图?似乎变换后的坐标系也根据此变换而改变,并且每次调用btnRotatePanAction(_:)时它也会改变。这就是为什么一切都会快速转变的原因(我猜是随机的)。

您可以在处理UIPanGestureRecognizer的视图中添加一个子视图,并转换不是主视图的子视图。

顺便说一句,不用保存水龙头的原点位置,您可以使用sender.translation(in: sender.view!)来返回触摸在坐标系中的变化方式。