我在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()
被呼叫了