首页 > 解决方案 > 调用“停止”功能时,如何逐渐减慢计时器的速度?

问题描述

我有一个包含 52 个 UIImages 的数组,我正在访问它们:

let cards: [UIImage] = Deck.allValues

我正在附加一个计时器,每 0.1 秒从所述数组中触发一个随机元素

   func startTimer() {
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(showRandomCard), userInfo: nil, repeats: true)

我还有其他功能可以停止和重新启动计时器(基本上只是 timer.invalidate() 和 startTimer())

我想知道在停止计时器时是否有可能使 timeInterval 逐渐减慢,就好像你在旋转一个轮子并且它减慢到停止一样。

如果我问这个问题很糟糕,我很抱歉,这是我在这里的第一篇文章,我很害怕。如果这个问题已经得到解答,我深表歉意。

作为参考,这是我用于计时器的#selector:

@objc func showRandomCard() {
    cardImageView.image = cards.randomElement() ?? UIImage.init(named: "AS")

标签: iosswift

解决方案


就像数据已经说过的那样,使用变量。

在控制器中设置最大值和最小值并使用函数或计算变量。

示例

let maxInterval = 2.0
let minInterval = 0.1
var timerInterval = 0.1

func nextInterval() -> TimeInterval?{
    let next = timerInterval + 0.1
    guard next <= maxInterval else { return nil }

    return next
}

@objc func startTimer(){
    if let next = nextInterval(){
    timer = Timer.scheduledTimer(timeInterval: next, target: self, selector: #selector(showRandomCard), userInfo: nil, repeats: true)
    }
}

永远不要后悔提出问题

和平


推荐阅读