如果用户单击按钮,我会在 3 秒后使用DispatchQueue.main.asyncAfter
. 但是,如果用户再次单击该按钮,我不想将隐藏活动再推迟 3 秒,因此之前的隐藏调用将被忽略。
我试过下面的代码,但它在前 3 秒后隐藏了视图。
class MyView: UIView {
private var hideControls: DispatchWorkItem?
func displayControls() {
isHidden = false
hideControls?.cancel()
hideControls = DispatchWorkItem {
print("displayControls: DispatchWorkItem called ")
self.isHidden = true
}
if let hideControls = hideControls {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(3), execute: hideControls)
}
}
}
如果你想忽略之前的工作,你可以使用 Timer,添加属性 timer,
var timer : Timer?
并在你的隐藏使用方法上。
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: false, block: {[weak self] (_) in
#add the action that you want
self?.isHidden = true
})
兄弟
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句