我正在创建一个游戏,用户得分,计时器倒计时需要更新,以增加2秒。我似乎不能让这个工作。网上的其他解决方案说,我需要使当前计时器无效,并创建一个新的。我该怎么做?计时器从15秒开始,我需要在if条件语句中添加2秒。
@objc func counter(){
seconds -= 1
countDownLabel.text = String(seconds)
if (seconds == 0){
timer.invalidate()
}
}
func updatetimer(){
seconds += 2
}
func activatetimer(){
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.counter), userInfo: nil, repeats: true)
}
2条答案
按热度按时间az31mfrm1#
我建议使用
DispatchSource
计时器,它可以在添加秒数之前可靠地重新启动。如果秒数刚刚过期,则不会发生任何事情。vsdwdz232#
Timer
不是问题的关键,Timer
只是一个“检查”它运行了多长时间的机会。真实的的关键是知道
Timer
已经运行了多长时间,以及应该允许它运行多长时间(即持续时间),从中可以计算出还剩多少时间。这样,您就可以更改持续时间,而无需执行任何其他操作。
请注意我的计时器正在减少
这是不相关的。基本上你有几条信息…
你知道:当
Timer
启动时您可以计算:计时器已运行的时间量(开始时间和现在时间之间的差值)
您可以计算:剩余时间(运行时间与允许持续时间之差)
这只是基本的时间/持续时间功能。
Timer
只是提供了定期“检查”计时器运行时间的方法...作为“粗糙”的例子...
Playground示例...
这是一个稍微修改过的版本,用于在Playground中测试这个想法
当我运行它时,它输出...
正如您所看到的,每次调用
moreTime
(查找++
输出)时,duration
将增加2秒。Clock
开始时为10秒,但最终总共运行了14
秒