在Swift

时间:2017-03-12 01:17:48

标签: swift multithreading

我一直在尝试在自重复计时器上创建一到两秒的延迟。这就是我创建计时器的方式:

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,我认为这样效率会很低?

1 个答案:

答案 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
}