我在timingView
中有一个按钮
,按钮本身显示计时器启动时剩余的时间:
func startTiming(button: UIButton, duration: Double, timingView: UIView?) {
var duration = duration
button.setTitle(String(Int(duration)), for: .normal)
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) {_ in
if duration > 0 {
duration -= 1
button.setTitle(String(Int(duration)), for: .normal)
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
timer.invalidate()
if timingView != nil {
timingView?.removeFromSuperview()
}
}
}
每当用户在计时期间点击 button
时,timingView
就会被删除:
func cancelAbilityTiming(sender: UIButton) {
sender.superview!.superview!.removeFromSuperview()
// remove timingView from superview
}
我期待 timingView
并且每次取消计时器时它的所有 subview 都会被删除,但是,如果我取消计时器然后重新启动它,则会有 2 个计时器同时运行(按钮标签每秒更改两次,变为不同的数字),如何避免出现这种情况?
编辑:
最佳答案
将timer
作为全局变量。在初始化之前还要检查 timer
是否为 nil
。在 timer.invalidate()
之后写入 timer = nil
。
关于ios - 删除其 super View 后按钮未删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424519/