iOS[swift]ワンポイントジェスチャーの連続高速トリガ防止

1576 ワード

ボタンが接続され、単一のジェスチャーが連続的にトリガーされると、私たちのアプリではさまざまな悪い現象が発生することがあります(例えば、バインドイベントはページをポップアップしたり、接続した後に同じページを連続的にポップアップしたり、ある命令をバインドしたり、接続した後に複数の命令を連続的にドロップしたりするなど).ボタンの接続を防止する前の記事でまとめましたが、カスタムバインドの単一のジェスチャーを防止する接続点をまとめました.
くだらないことは言わないで、いつものルールでコードをつけます.
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() {
       //...
    }