以剩余时间间隔启动新计时器

时间:2017-02-06 19:43:47

标签: ios swift timer

我有一个每1.0秒发射一次的计时器。每次触发时,TimeInterval变量都设置为Date.timeSinceReferenceDate,当我暂停计时器时,另一个TimeInterval变量也会被设置为Date.timeSinceReferenceDate并且计时器无效。

当我再次按下开始按钮时,我希望它从停止的位置恢复(即如果你再次开始前0.5秒暂停,恢复时需要0.5秒才能触发,而不是1.0目前确实如此)。

以下是我的代码的外观:

       if (elapsedTime - beginTime) < 1.0 {
            leftoverTime = elapsedTime - beginTime
            timer = Timer.scheduledTimer(timeInterval: leftoverTime, target: self, selector: #selector(decreaseTime), userInfo: nil, repeats: false)
            let fireDate = Date().addingTimeInterval(leftoverTime)
            timer = Timer.init(fireAt: fireDate, interval: 1.0, target: self, selector: #selector(decreaseTime), userInfo: nil, repeats: true)
       }

我想我需要使用Run Loop做一些事情,但是有没有办法只做一个带有开火日期的预定计时器?如果我使用fire()方法,它自然只会运行一次并且不会循环。

希望有人可以对此有所启发。

谢谢。

修改

我有一个UIViewPropertyAnimator

var animator: UIViewPropertyAnimator? = nil

当我启动计时器时,我首先检查它是否为

animator == nil {
        animator = UIViewPropertyAnimator(duration: TimeInterval(timeSec), curve: .linear) {
            self.view.layoutIfNeeded()
        }
}

然后计时器最初启动

timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(decreaseTime), userInfo: nil, repeats: true)

在减少时间的方法中,我改变约束并开始动画

    self.timeTrailing.constant = screenSize / 2
    self.timeLeading.constant = screenSize / 2
    animator?.startAnimation()

此时它一切都很好,但是当我按下暂停按钮并暂停动画(并使计时器无效)时,恢复它们意味着它们不再同步。我想象一下,因为按下它时你不会达到0.1的间隔,而是0.03,0.07等。

animator?.pauseAnimation()
timer?.invalidate()

我如何确保他们始终同步,无论您何时以及在完成之前暂停多少次?

0 个答案:

没有答案