为什么Swipe Gesture Recognizer只能使用一次?

时间:2015-02-07 20:23:40

标签: ios swift uigesturerecognizer

我设置了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下载项目演示。为什么会这样?

2 个答案:

答案 0 :(得分:2)

我想,问题在于旋转图像的那一刻,与之相关的手势识别器也会旋转。你可以确保自己:

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

如果您想要始终从右向左轻扫,您可以通过以下几种方式进行:

  1. 如果您的视图始终旋转180度,最简单的方法是更改​​手势识别器方向(@LyndseyScott比我更快,右侧代码为此,您可以检查她的答案:))。
  2. 另一种选择(特别是,如果可能出现某种情况,当你以任意角度旋转视图时),就是在你要旋转的视图顶部创建一个UIView(但不是它的子视图!),改为添加手势识别器。

答案 1 :(得分:2)

只是详细说明FreeNickname的答案,因为手势识别器与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
                }
        })
}