コードに直接移動します。コードにコメントがあります
。最初の記述方法
///手势
lazy var tapGestureRecognizer: UITapGestureRecognizer = {
let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction(tap:)))
return tap
}()
///上次点击时的时间
var lastTapTime:TimeInterval = 0
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .gray
self.view.addGestureRecognizer(tapGestureRecognizer)
}
@objc func tapAction(tap:UITapGestureRecognizer) {
let point = tap.location(in: self.view)
print(point)
let time = Date(timeIntervalSinceNow: 0).timeIntervalSince1970
if time - lastTapTime > 0.25 {
//单击
//延迟执行 0.25秒
self.perform(#selector(sigleTapAction), with: nil, afterDelay: 0.25)
}else {
//双击
//取消performSelector方法注册过的方法,就是说当上面这个方法正在运行,比如希望0.25秒钟之后执行某一个方法,但是没到0.25秒钟的情况下取消performSelector
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(sigleTapAction), object: nil)
print("双击手势")
}
lastTapTime = time
}
//Mark: 单击操作
@objc func sigleTapAction() {
print("单击手势")
}
2番目の書き方
///手势 单击
lazy var tapGestureRecognizer: UITapGestureRecognizer = {
let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction(tap:)))
tap.numberOfTapsRequired = 1
return tap
}()
///手势 双击
lazy var tapGestureRecognizer2: UITapGestureRecognizer = {
let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction2(tap:)))
tap.numberOfTapsRequired = 2
return tap
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .gray
tapGestureRecognizer.require(toFail: tapGestureRecognizer2) //这句很关键
self.view.addGestureRecognizer(tapGestureRecognizer)
self.view.addGestureRecognizer(tapGestureRecognizer2)
}
@objc func tapAction(tap:UITapGestureRecognizer) {
print("单击---手势")
}
@objc func tapAction2(tap:UITapGestureRecognizer) {
print("双击---手势")
}