我想通过以下方式自定义长按手势识别器:
1)当我按住一个物体0.5秒时,物体变暗,然后 2)当我继续按住对象一秒钟(总共1.5秒)时,会发生一些动作(例如对象消失)。
基本上,通过按住对象至少1.5秒,两个动作分别在两个时间发生。我也有一个轻敲手势识别器,可能会影响事物。
答案 0 :(得分:2)
请参阅Reinier's solution,因为它是正确的。这个增加了延迟以满足require(toFail:)
您可以使用属性minimumPressDuration
设置时间(以秒为单位,默认值为0.5)
let quickActionPress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.zeroFiveSecondPress(gesture:))) // 0.5 seconds by default
let laterActionPress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.oneFiveSecondPress(gesture:)))
laterActionPress.minimumPressDuration = 1.5
someView.addGestureRecognizer(quickActionPress)
someView.addGestureRecognizer(laterActionPress)
// If 1.5 detected, only execute that one
quickActionPress.require(toFail: laterActionPress)
@objc func zeroFiveSecondPress(gesture: UIGestureRecognizer) {
// Do something
print("0.5 press")
}
@objc func oneFiveSecondPress(gesture: UIGestureRecognizer) {
zeroFiveSecondPress(gesture: gesture)
// Do something else
print("1.5 press")
}
答案 1 :(得分:2)
来自@nathan的答案基本上很好,但缺少一个细节,你需要实现UIGestureRecognizerDelegate
以允许两个手势同时工作,所以这是我的代码
class ViewController: UIViewController, UIGestureRecognizerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//this for .5 time
let firstGesture = UILongPressGestureRecognizer(target: self, action: #selector(firstMethod))
//this for 1.5
let secondGesture = UILongPressGestureRecognizer(target: self, action: #selector(secondMethod))
secondGesture.minimumPressDuration = 1.5
firstGesture.delegate = self
secondGesture.delegate = self
self.view.addGestureRecognizer(firstGesture)
self.view.addGestureRecognizer(secondGesture)
}
func firstMethod() {
debugPrint("short")
}
func secondMethod() {
debugPrint("long")
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool{
return true
}
}
希望这个帮助