美文网首页iOS学习笔记iOS学习开发程序员
iOS[swift]防止单点手势连续快速触发

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

作者: 一只风流的dog | 来源:发表于2016-11-28 11:55 被阅读0次

按钮被连点,单点手势被连续触发有时候我们的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() {
       //...
    }

相关文章

网友评论

    本文标题:iOS[swift]防止单点手势连续快速触发

    本文链接:https://www.haomeiwen.com/subject/gyhopttx.html