我的代码有两个按钮:
如果在通知序列正在进行时点击开始按钮,则计时器应该重置 - 因此下一个通知应该在您最后一次按下按钮后30秒出现。如果你每隔25秒点击一次按钮,你就不会看到通知。
我只包含了解决此问题所需的代码:
func startTimer(){
let timeInterval = 30.0
if isGrantedAccess && !timer.isValid { //allowed notification and timer off
timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: true, block: { (timer) in
self.sendNotification()
})}}
func stopTimer(){
//shut down timer
timer.invalidate()
//clear out any pending and delivered notifications
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
}
@IBAction func startButton(_ sender: UIButton) {
startTimer()
}
@IBAction func stopButton(_ sender: UIButton) {
stopTimer()
}
答案 0 :(得分:0)
你所需要的通常被称为去抖动,有一个扭曲。通常用于搜索等类型。
我会使用一个重复计时器,如果在30秒之前点击按钮就会取消它,并在每次点火时再次启动三十秒重复计时器。我还会立即触发本地通知并使计时器无效,而不是使本地通知无效。
这里有一个在objective-c中有一个例子的要点,你可以重构在swift中使用。 Objective-C Debounce Example