iOS[swift]防止单点手势连续快速触发

按钮被连点,单点手势被连续触发有时候我们的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() {
       //...
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,650评论 25 709
  • “儿子,你现在也是个明星了,那么多好看的小姑娘你就找一个呗”冯建宇跟父母分居两地,每次打电话都少不了的话题就是:催...
    我是小阿旭吖阅读 664评论 0 0
  • 罗素抬头向上看的时候,觉得眼睛要被天空的蓝色灌满。 罗素不喜欢晴天,透着一股万事安好的腐朽味。她抓着自己的防晒帽,...
    诗夷长技以制颐阅读 210评论 0 0