我一直在尝试实现一种动画,当用户拖动屏幕时,视图会旋转一个点。我已经实现了控制旋转的部分(与此问题相关的部分)。如果您愿意,可以查看我拥有的所有代码here(简称)。
控制轮播的代码主要位于touchesBegan
和touchesMoved
:
var p = CGPoint.zero
// ...
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
p = (touches.first?.location(in: self))!
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let dev = p.x - (touches.first?.location(in: self).x)!
let angle = 2 * CGFloat(M_PI) - atan(dev / p.y)
self.transform = CGAffineTransform(rotationAngle: angle)
}
现在问题是:当我的手指拖动到视图的初始中间(旋转前的中间)之下时,它完全正常;然而,当我的手指拖动到视图的初始中间上方时,视图旋转到错误的量,并且它在两个位置之间来回快速跳跃,所以看起来有一个视图的副本。
由于我的一般数学/逻辑或我的实现,我不知道它是否不起作用。
当我在视图的初始中间拖动时,为什么它无法正常工作?如何解决?