我一直在尝试在自重复计时器上创建一到两秒的延迟。这就是我创建计时器的方式:
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秒后运行的Timer,这会导致重新激活前一个计时器。但是,如果有一种方法可以暂停当前的Timer,我认为这样效率会很低?
答案 0 :(得分:0)
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
}