为什么滑动手势识别器只能工作一次?
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。为什么会这样?
我想,问题在于当您旋转图像时,与其关联的手势识别器也会旋转。你可以确定自己:
从右向左滑动。图像将旋转。然后从左向右滑动。它将再次旋转。
如果您想始终处理从右向左的滑动,可以通过以下几种方式实现:
- 如果您的视图总是旋转 180 度,最简单的方法是更改手势识别器的方向(@LyndseyScott 比我更正此代码的速度,您可以查看她的回答:))。
- 另一种选择(特别是,如果可能有这种情况,当您将视图旋转任意角度时),是在要旋转的视图之上创建一个 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
}
})
}
我设置了一个 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。为什么会这样?
我想,问题在于当您旋转图像时,与其关联的手势识别器也会旋转。你可以确定自己:
从右向左滑动。图像将旋转。然后从左向右滑动。它将再次旋转。
如果您想始终处理从右向左的滑动,可以通过以下几种方式实现:
- 如果您的视图总是旋转 180 度,最简单的方法是更改手势识别器的方向(@LyndseyScott 比我更正此代码的速度,您可以查看她的回答:))。
- 另一种选择(特别是,如果可能有这种情况,当您将视图旋转任意角度时),是在要旋转的视图之上创建一个 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
}
})
}