按钮水龙头和长按手势

Alv*_*Wan 21 uigesturerecognizer ios uitapgesturerecognizer swift

我的手势有些麻烦.

我试图在同一个按钮上同时使用水龙头和长按,所以我已经习惯了

@IBAction func xxx (sender: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

@IBAction func xxx (sender: UILongPressGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

但是当我点击时,我的按钮似乎对这两个功能做出了反应.可能有什么问题?

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

Ras*_*n L 57

很难说没有使用你的代码,你只提供了两行,但我建议你这样做:

改为为按钮创建一个插座

@IBOutlet weak var myBtn: UIButton!
Run Code Online (Sandbox Code Playgroud)

并在您viewDidLoad()添加手势按钮

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

然后创建处理水龙头的动作

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

更新了Swift 4.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")
        //Do Whatever You want on End of Gesture
    }
    else if sender.state == .began {
        print("UIGestureRecognizerStateBegan.")
        //Do Whatever You want on Began of Gesture
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @AlvinWan,对于迟到的回复感到抱歉,但这是因为`UILongPressGestureRecognizer`有两个状态,开始和结束.我用一个例子更新了代码.请注意,我在longTap中添加了一个参数,并在`longGesture``UILongPressGestureRecognizer`中添加了一个":". (2认同)