多次激活 UI 旋转手势识别器 Swift
UIRotationGestureRecognizer activates multiple times Swift
当使用 UIRotationGestureRecognizer
时,旋转被识别,但它会多次触发动作。这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol))
self.view.addGestureRecognizer(rotation)
}
func lol() {
print ("hi")
UIView.animateWithDuration(5.0, animations: {
let currTransform = self.view.transform
let newTransform = CGAffineTransformConcat(currTransform, CGAffineTransformMakeRotation(CGFloat(M_PI)))
self.view.transform = newTransform
})
}
查看 UIRotationGestureRecognizer 的状态。
let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol(_:)))
func lol(sender: UIRotationGestureRecognizer) {
print(sender.state)
我预计您刚刚收到 Began
和 End
状态。
UIRotationGestureRecognizer 将在收到已执行旋转多指触摸手势的通知时多次触发其分配的操作。预计
lol()
会被调用多次
我假设您想在用户在视图对象上使用捏合手势时旋转视图。在这种情况下,您应该监听 UIRotationGestureRecognizer 实例的 .rotation 属性,而不是使用 UIView.animateWithDuration(您必须在其中手动设置持续时间) ,这将 return 手势识别器的最新旋转值,以弧度为单位。
然后您可以使用此 属性 设置视图的旋转:
let transform = CGAffineTransformRotate(self.block.transform, rotation.rotation)
self.block.transform = transform
在你的 lol() 函数中。
当使用 UIRotationGestureRecognizer
时,旋转被识别,但它会多次触发动作。这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol))
self.view.addGestureRecognizer(rotation)
}
func lol() {
print ("hi")
UIView.animateWithDuration(5.0, animations: {
let currTransform = self.view.transform
let newTransform = CGAffineTransformConcat(currTransform, CGAffineTransformMakeRotation(CGFloat(M_PI)))
self.view.transform = newTransform
})
}
查看 UIRotationGestureRecognizer 的状态。
let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol(_:)))
func lol(sender: UIRotationGestureRecognizer) {
print(sender.state)
我预计您刚刚收到 Began
和 End
状态。
UIRotationGestureRecognizer 将在收到已执行旋转多指触摸手势的通知时多次触发其分配的操作。预计
lol()
会被调用多次
我假设您想在用户在视图对象上使用捏合手势时旋转视图。在这种情况下,您应该监听 UIRotationGestureRecognizer 实例的 .rotation 属性,而不是使用 UIView.animateWithDuration(您必须在其中手动设置持续时间) ,这将 return 手势识别器的最新旋转值,以弧度为单位。
然后您可以使用此 属性 设置视图的旋转:
let transform = CGAffineTransformRotate(self.block.transform, rotation.rotation)
self.block.transform = transform
在你的 lol() 函数中。