多次激活 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)

我预计您刚刚收到 BeganEnd 状态。

UIRotationGestureRecognizer 将在收到已执行旋转多指触摸手势的通知时多次触发其分配的操作。预计

lol()

会被调用多次

我假设您想在用户在视图对象上使用捏合手势时旋转视图。在这种情况下,您应该监听 UIRotationGestureRecognizer 实例的 .rotation 属性,而不是使用 UIView.animateWithDuration(您必须在其中手动设置持续时间) ,这将 return 手势识别器的最新旋转值,以弧度为单位。

然后您可以使用此 属性 设置视图的旋转:

let transform = CGAffineTransformRotate(self.block.transform, rotation.rotation)
self.block.transform = transform

在你的 lol() 函数中。