我想在正在进行的通话视图中重现WhatsApp按钮的行为:它们在出现几秒钟后消失,并且每次用户点击屏幕时,它们都会再次出现。
假设我有这两个按钮,
@IBOutlet weak var callButton: UIButton!
@IBOutlet weak var muteButton: UIButton!
这是在输入viewDidAppear
以及用户点击屏幕时调用的代码段:
self.callButton.alpha = 1.0
self.muteButton.alpha = 1.0
delay(4.0) {
UIView.animate(withDuration: 1.0, animations: {
self.callButton.alpha = 0.0
self.muteButton.alpha = 0.0
}, completion: { _ in })
}
func delay(_ seconds: Double, completion: @escaping () -> ()) {
let popTime = DispatchTime.now() + Double(Int64(Double(NSEC_PER_SEC) * seconds)) / Double(NSEC_PER_SEC)
DispatchQueue.main.asyncAfter(deadline: popTime) {
completion()
}
}
使用此代码,如果用户在上次通话后3秒钟点击屏幕,则按钮将在1秒后消失。因此,我想知道如果同时再次点击视图,该如何阻止上一个UIView.animate
。
感谢您的帮助
答案 0 :(得分:1)
首先,当Apple在UIView.animate
中向您提供了一种延迟方法时,为什么还要创建一个延迟方法?
现在,要实现所需的功能,只需使用一个标志来检查该方法是否已被调用一次并阻止该方法调用。
var animating = false
func yourAnimateMethod() {
if !animating {
animating = true
UIView.animate(withDuration: 1, delay: 4, options: .curveLinear, animations: {
self.callButton.alpha = 0.0
self.muteButton.alpha = 0.0
}) { (completed) in
if completed {
animating = false
}
}
}
}