2015-12-31 118 views
14

我对手势有点麻烦。按钮水龙头和长按手势

我试图在同一按钮上使用踢踏舞及长按,所以我用

@IBAction func xxx (sender: UITapGestureRecognizer) 

@IBAction func xxx (sender: UILongPressGestureRecognizer) 

,但我的按钮,似乎这两个功能时反应我点击。什么可能是错的?

func long(longpress: UIGestureRecognizer){ 
    if(longpress.state == UIGestureRecognizerState.Ended){ 
    homeScoreBool = !homeScoreBool 
    }else if(longpress.state == UIGestureRecognizerState.Began){ 
     print("began") 
    } 
} 

回答

39

很难说what's不是你的代码的工作,与您所提供的只有两行,但我会建议你做它用这种方式来代替:

创建一个出口您的按钮,而不是

@IBOutlet weak var myBtn: UIButton! 

而在你viewDidLoad()手势添加到按钮

let tapGesture = UITapGestureRecognizer(target: self, action: "normalTap") 
let longGesture = UILongPressGestureRecognizer(target: self, action: "longTap:") 
tapGesture.numberOfTapsRequired = 1 
myBtn.addGestureRecognizer(tapGesture) 
myBtn.addGestureRecognizer(longGesture) 

然后创建处理水龙头

func normalTap(){ 

    print("Normal tap") 
} 

func longTap(sender : UIGestureRecognizer){ 
    print("Long tap") 
    if sender.state == .Ended { 
    print("UIGestureRecognizerStateEnded") 
    //Do Whatever You want on End of Gesture 
    } 
    else if sender.state == .Began { 
     print("UIGestureRecognizerStateBegan.") 
     //Do Whatever You want on Began of Gesture 
    } 
} 

雨燕3.0版本的操作:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.normalTap)) 
let longGesture = UILongPressGestureRecognizer(target: self, action: Selector(("longTap:"))) 
tapGesture.numberOfTapsRequired = 1 
myBtn.addGestureRecognizer(tapGesture) 
myBtn.addGestureRecognizer(longGesture) 

func normalTap(){ 

    print("Normal tap") 
} 

func longTap(sender : UIGestureRecognizer){ 
    print("Long tap") 
    if sender.state == .ended { 
     print("UIGestureRecognizerStateEnded") 
     //Do Whatever You want on End of Gesture 
    } 
    else if sender.state == .began { 
     print("UIGestureRecognizerStateBegan.") 
     //Do Whatever You want on Began of Gesture 
    } 
} 

为雨燕4.x的更新语法:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(normalTap(_:))) 
tapGesture.numberOfTapsRequired = 1 
myBtn.addGestureRecognizer(tapGesture) 

let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(longTap(_:))) 
myBtn.addGestureRecognizer(longGesture) 

@objc func normalTap(_ sender: UIGestureRecognizer){ 
    print("Normal tap") 
} 

@objc func longTap(_ sender: UIGestureRecognizer){ 
    print("Long tap") 
    if sender.state == .ended { 
     print("UIGestureRecognizerStateEnded") 
     //Do Whatever You want on End of Gesture 
    } 
    else if sender.state == .began { 
     print("UIGestureRecognizerStateBegan.") 
     //Do Whatever You want on Began of Gesture 
    } 
} 
+0

谢谢它完美的工作,但当我尝试两次使用长时间按下它的行动两次,你知道为什么吗?谢谢先生 –

+0

也许它是捕获双击? – Marcelo

+2

@AlvinWan,对于迟到的回复感到抱歉,但是这是因为UILongPressGestureRecognizer有两个状态,开始和结束。我用一个例子更新了代码。请注意,我已经为longTap添加了一个参数,并向'longGesture'' UILongPressGestureRecognizer'添加了一个“:”。 –