我一直在尝试在自动重复计时器上创建一两秒的延迟。这就是我创建计时器的方式:
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 秒后运行的计时器,这会导致前一个计时器重新激活。但是,我认为如果有办法让当前的计时器休眠,效率会很低吗?
最佳答案
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 - 在 Swift 中休眠或延迟 Timer 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42742608/