按钮被连点,单点手势被连续触发有时候我们的APP会出现各种糟糕的现象(例如: 绑定事件是弹出个页面,连点之后连续弹出多个相同的页面,或者绑定某个指令,连点之后连续下发多个指令等等)等等... 防止按钮的连点我已经在之前的文章中总结过了,本文总结的是防止自定义绑定的单点手势的连点:
废话不说,老规矩上代码:
import UIKit
class TapGestureManager:UITapGestureRecognizer,UIGestureRecognizerDelegate {
//想间隔的时长
var intervalTime: NSTimeInterval?
//用于完成间隔的计时器
private var eventTimer: NSTimer?
override init(target: AnyObject?, action: Selector) {
super.init(target: target, action: action)
delegate = self
}
// 是否响应触摸手势的代理方法
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if (eventTimer != nil) {
return false
}
eventTimer = NSTimer(timeInterval: intervalTime ?? 0, target: self, selector: #selector(deinitTimer), userInfo: nil, repeats: false)
NSRunLoop.currentRunLoop().addTimer(eventTimer!, forMode: NSRunLoopCommonModes)
return true
}
func deinitTimer() {
eventTimer?.invalidate()
eventTimer = nil
}
}
以上的代码就可以防止单点手势连续快速触发,食用方法如下:
override func viewDidLoad() {
super.viewDidLoad()
// 新建一个绑定点击事件的单点手势(注: 不一定是绑定一个事件的手势,闭包也可以,自己修改这里不赘述)
let tap = TapGestureManager(target: self, action: #selector(test_Tap))
// 设置手势的间隔时间:10秒
tap.intervalTime = 10
//添加手势,(搞定!)
userCenterImage.addGestureRecognizer(tap)
}
func test_Tap() {
//...
}
网友评论