根据你提供的代码只有两行,很难确定其中哪一部分出现了问题。但是我建议你这样做:创建一个按钮的 outlet。
@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")
}
else if sender.state == .Began {
print("UIGestureRecognizerStateBegan.")
}
}
Swift 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
}
}
Swift 5.x的语法已更新:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(normalTap))
button.addGestureRecognizer(tapGesture)
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(longTap))
button.addGestureRecognizer(longGesture)
@objc func normalTap(_ sender: UIGestureRecognizer){
print("Normal tap")
}
@objc func longTap(_ sender: UIGestureRecognizer){
print("Long tap")
if sender.state == .ended {
print("UIGestureRecognizerStateEnded")
}
else if sender.state == .began {
print("UIGestureRecognizerStateBegan.")
}
}
UILongPressGestureRecognizer
有两种状态,开始和结束。我已更新了代码并提供了示例。请注意,我向longTap添加了一个参数,并在longGesture
的UILongPressGestureRecognizer
后加了一个 ":"。 - Rashwan Lsender.view?.tag
访问标记。还要注意每个按钮必须有自己的手势声明,但您仍然可以调用相同的函数。例如:let tapForFirstButton = UITapGestureRecognizer(target: self, action: #selector(normalTap(_:)))
和let tapForSecondButton = UITapGestureRecognizer(target: self, action: #selector(normalTap(_:)))
。 - Rashwan L