ios - 调用“停止”功能时,如何逐渐减慢计时器的速度?
问题描述
我有一个包含 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")
解决方案
就像数据已经说过的那样,使用变量。
在控制器中设置最大值和最小值并使用函数或计算变量。
示例:
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)
}
}
永远不要后悔提出问题
和平
推荐阅读
- asp.net - 检索图像以查看 ASP.MVC
- python - 在 pandas apply 函数中修改同一个对象是否安全?
- java - 当我尝试通过 selenium chrome 驱动程序启动时,Chrome 崩溃
- c# - 图像分类 - 从位图对象加载。微软.ML
- google-chrome-extension - 如何将chrome扩展上的输入设置为来自dom的文本?
- java - 在指定路径 /home/runner/.m2/repository/com/alibaba/druid/1.2.6/lib/openjdk-1.8-jconsole.jar 找不到工件 com.sun:jconsole:jar:1.8
- ajax - Ajax 调用 Laravel Mix 后 Vue 组件未重新渲染
- ejabberd - 在 ejabberd-21 中无法注册用户(未知虚拟主机)
- python - 无法导入打开的 cv 模块
- pyspark - 如何在 EMR 上的 pyspark 管道中为 sklearn DBSCAN 创建一个 udf