通过按下按钮重置通知计时器(swift3)

时间:2017-06-04 17:30:13

标签: ios if-statement timer swift3 notifications

我的代码有两个按钮:

  • 应该开始一个“通知序列”,其中通知将每30秒无限期出现一次。
  • 另一个应该停止通知序列。

如果在通知序列正在进行时点击开始按钮,则计时器应该重置 - 因此下一个通知应该在您最后一次按下按钮后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()
}

1 个答案:

答案 0 :(得分:0)

你所需要的通常被称为去抖动,有一个扭曲。通常用于搜索等类型。

我会使用一个重复计时器,如果在30秒之前点击按钮就会取消它,并在每次点火时再次启动三十秒重复计时器。我还会立即触发本地通知并使计时器无效,而不是使本地通知无效。

这里有一个在objective-c中有一个例子的要点,你可以重构在swift中使用。 Objective-C Debounce Example