我有一个容器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
答案 0 :(得分:0)
您是否转换了将UIPanGestureRecognizer应用于的相同视图?似乎变换后的坐标系也根据此变换而改变,并且每次调用btnRotatePanAction(_:)
时它也会改变。这就是为什么一切都会快速转变的原因(我猜是随机的)。
您可以在处理UIPanGestureRecognizer的视图中添加一个子视图,并转换不是主视图的子视图。
顺便说一句,不用保存水龙头的原点位置,您可以使用sender.translation(in: sender.view!)
来返回触摸在坐标系中的变化方式。