使用UIGestureRecognizerState点击手势不起作用

时间:2014-10-06 05:11:20

标签: ios iphone animation uiview swift

我有一个应用了点按手势的视图。我希望看到"收缩"当某人的手指在视线上并且当手指抬起时视图恢复正常。我试图通过UIGestureRecognizerState来实现这一目标,但它无法正常工作。只有在我移开手指并且不再返回后,视图才会缩小。这是我的代码:

@IBAction func shareButton(sender: AnyObject) {

    if sender.state == UIGestureRecognizerState.Changed {  
        UIView.animateWithDuration(0.1, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.4, options: nil, animations: {
            self.shareButton.transform = CGAffineTransformMakeScale(0.9, 0.9)
        }, completion: nil)
    } else if sender.state == UIGestureRecognizerState.Ended {
        UIView.animateWithDuration(0.1, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.4, options: nil, animations: {
            self.shareButton.transform = CGAffineTransformMakeScale(0.7, 0.7)
        }, completion: nil)
    }
}

2 个答案:

答案 0 :(得分:1)

var delaysTouchesEnded: Bool // default is YES.

仅在此手势识别失败后才会将touchesEnded事件传递到目标视图。这确保了如果识别出手势,则可以取消作为手势一部分的触摸

因此,它将在下次调用操作,因为只有在执行了点击操作后才会执行操作。 触摸结束时将执行操作方法。

但你可以使用touchesBegin和touchesEnded方法。 如果您使用点击手势,它将无法正常工作,因为当您的触摸将被释放时将调用操作方法。您还可以使用长按手势来缩小视图。

覆盖func

touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        UIView.animateWithDuration(1, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.4, options: nil,
            animations: {
                self.vwBlue.transform = CGAffineTransformMakeScale(0.5, 0.5)
            }, completion: nil)
    }

    override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
        UIView.animateWithDuration(1, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.4, options: nil,
            animations: {
                self.vwBlue.transform = CGAffineTransformMakeScale(1, 1)
            }, completion: nil)
    }

答案 1 :(得分:0)

我认为您可以尝试在视图中添加两个目标。收缩UIControlEventTouchDown的动画和另一个UIControlEventTouchUpInside或其他事件的动画,具体取决于应该发生什么? Ref iOS docs