Swift UITapGestureRecognizer 封装

319 阅读1分钟

1.防止多点事件

import UIKit

class TapGestureManager:UITapGestureRecognizer,UIGestureRecognizerDelegate {
   // 想间隔的时长
   var intervalTime: TimeInterval?
   //用于完成间隔的计时器
   private var eventTimer: Timer?
   
   override init(target: Any?, action: Selector?) {
       super.init(target: target, action: action)
       delegate = self
   }
   
   // 是否响应触摸手势的代理方法
   func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
       if (eventTimer != nil) {
           return false
       }
       eventTimer = Timer(timeInterval: intervalTime ?? 0, target: self, selector: #selector(deinitTimer), userInfo: nil, repeats: false)
       RunLoop.current.add(eventTimer!, forMode: RunLoop.Mode.common)
       
       return true
   }
   
   @objc func deinitTimer() {
       eventTimer?.invalidate()
       eventTimer = nil
    }
}

调用方法

    let tap = TapGestureManager(target: self, action: #selector(locaViewTap))
       // 防止多点 -- 设置手势的间隔时间:1秒
       tap.intervalTime = 1
       locaView.addGestureRecognizer(tap)

  @objc func locaViewTap() {
    
   }