为什么滑动手势识别器只能工作一次?

Why does the Swipe Gesture Recognizer only work once?

我设置了一个 Swipe Gesture Recognizer 并将其连接到代码,这样当用户向左滑动时 UIImageView 会旋转。

@IBAction func swipeToLeft(sender: AnyObject) {

    UIView.animateWithDuration(1.0, animations: {
        self.image.transform = CGAffineTransformRotate(self.image.transform, -3.14159265358979 )
    })
}

我确保 viewDidLoad 方法如下所示:

image.userInteractionEnabled = true

但是,UIImageView 只被转换 一次

您可以从这里下载项目的演示link。为什么会这样?

我想,问题在于当您旋转图像时,与其关联的手势识别器也会旋转。你可以确定自己:

从右向左滑动。图像将旋转。然后从左向右滑动。它将再次旋转。

如果您想始终处理从右向左的滑动,可以通过以下几种方式实现:

  1. 如果您的视图总是旋转 180 度,最简单的方法是更改​​手势识别器的方向(@LyndseyScott 比我更正此代码的速度,您可以查看她的回答:))。
  2. 另一种选择(特别是,如果可能有这种情况,当您将视图旋转任意角度时),是在要旋转的视图之上创建一个 UIView(但不是它的子视图!) , 并将手势识别器添加到它。

只是为了详细说明 FreeNickname 的回答,因为手势识别器 "rotates" 和 UIImageView,您可以将代码更改为以下代码,以便滑动手势与图像交换方向,您可以继续从右向左滑动以触发动画:

@IBAction func swipeToLeft(sender: UISwipeGestureRecognizer) {
    UIView.animateWithDuration(1.0, animations: {
            self.doubleDot.transform = CGAffineTransformRotate(self.doubleDot.transform, -3.14159265358979 )
            }, completion: {
                (value: Bool) in
                if sender.direction == UISwipeGestureRecognizerDirection.Left {
                    sender.direction = UISwipeGestureRecognizerDirection.Right
                } else {
                    sender.direction = UISwipeGestureRecognizerDirection.Left
                }
        })
}