在 Swift 中休眠或延迟 Timer 线程
Posted
技术标签:
【中文标题】在 Swift 中休眠或延迟 Timer 线程【英文标题】:Sleep or delay a Timer thread in Swift 【发布时间】:2017-03-12 01:17:48 【问题描述】:我一直在尝试在自重复计时器上创建一两秒的延迟。这就是我创建计时器的方式:
currentThread = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(Movement.updatePosition), userInfo: nil, repeats: true)
所以计时器不断运行方法updatePosition()。但是,我在该方法中有一个 if 语句,我希望将计时器延迟几秒钟:
if distance <= respawnDistance * 0.1
// Delay timer for 1 second
我在想我可以这样做:
currentThread.invalidate()
然后只需创建另一个在 1 秒后运行的计时器,这会导致前一个计时器的重新激活。但是,我认为如果有办法让当前定时器休眠,那效率会很低吗?
【问题讨论】:
你可以使用一个无限循环来调用 updatePosition 方法,并且只有一个 1 秒的计时器吗?这可能不是最有效的方法... 我想知道updatePosition
做了什么。如果这是某种动画,请使用动画,而不是计时器。
你只需要一个布尔变量。
【参考方案1】:
NSTimer
并不准确。它的最大分辨率约为 50 - 100 毫秒。总之,你可以添加一个变量来控制定时器的触发:
var doNotUpdate = false
if distance <= respawnDistance * 0.1
doNotUpdate = true
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0)
doNotUpdate = false
func updatePosition()
if doNotUpdate return
// update your position
【讨论】:
我还注意到计时器不准确。谢谢以上是关于在 Swift 中休眠或延迟 Timer 线程的主要内容,如果未能解决你的问题,请参考以下文章