UITapGestureRecognizer的奇怪行为

时间:2019-01-01 16:26:46

标签: ios swift uitapgesturerecognizer

我在Swift 4中实现了SnackBar / Toast消息,它使开发人员可以设置以下显示持续时间(枚举)和以下行为:

  • .long / .short:计时器被触发并关闭SnackBar 或用户点击视图并关闭它

  • .constant:没有计时器,只有TapGesture可以关闭

现在,在第一种情况(.long / .short)中,SnackBar会按预期做出反应。计时器触发或用户点击并关闭视图。

在第二种情况下(.constant)-没有计时器-无法识别出Tap手势,并且视图也不会消失

这是三个功能:

    private func defineDismissMode(){
        switch self.message.duration {
        case .short, .long:
            self.setTimer()
        case .constant:
            self.setTapGesture()
        }
    }

    private func setTimer(){
        guard self.timer == nil else {return}
        self.timer = Timer.scheduledTimer(timeInterval: self.message.duration.rawValue, target: self, selector: #selector(self.dismissSnackBar), userInfo: nil, repeats: false)
        self.setTapGesture()
    }

    private func setTapGesture() {
        self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissSnackBar))
        self.snackView.addGestureRecognizer(self.tapGestureRecognizer!)
    }

    @objc private func dismissSnackBar(){
      ...
    }

有人知道为什么在setTapGesture()之后调用setTimer()时起作用,并且抽头触发self.dismissSnackBar,但是在没有setTimer()的情况下调用UITapGestureRecognizer不会被触发吗? >

注意:是的,我检查了case: .constant -> setTapGesture()被呼叫了

0 个答案:

没有答案