2016-08-07 29 views
4

使用UIRotationGestureRecognizer时,旋转被识别,但会多次触发动作。这里是我的代码:UIRotationGestureRecognizer激活多次Swift

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 

    }) 
} 

回答

2

查看UIRotationGestureRecognizer的状态。

let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol(_:))) 

func lol(sender: UIRotationGestureRecognizer) { 
    print(sender.state) 

我希望你只是接收BeganEnd状态。

1

UIRotationGestureRecognizer会在接收到已执行旋转式多指触摸手势的通知时触发其分配的动作。预计

lol() 

将被多次调用。

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

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

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

你笑()函数中。

+0

我不是在寻找与方向的用户交互。相反,我正在寻找用户执行手势,并且视图每次旋转pi弧度。 –