首次开火后延迟计时器

时间:2015-07-14 05:41:17

标签: ios swift timer

我的应用程序中有一个计时器,它使用以下方法触发某个事件

myTimer =  NSTimer.scheduledTimerWithTimeInterval(10, target: self,
    selector: "searchForDrivers:", userInfo:nil, repeats: true)

我注意到它第一次以10 ms的延迟触发。我不想第一次推迟用户。但对于第二个请求,我希望它延迟10毫秒。我怎么能实现这个目标呢?

2 个答案:

答案 0 :(得分:3)

First schedule the timer as you've done.

timer =  NSTimer.scheduledTimerWithTimeInterval(
    10.0, target: self,
    selector: "searchForDrivers:",
    userInfo: nil,
    repeats: true
)

Then, immediately afterwards, fire timer.

timer.fire()

According to the documentation,

You can use this method to fire a repeating timer without interrupting its regular firing schedule. If the timer is non-repeating, it is automatically invalidated after firing, even if its scheduled fire date has not arrived.

See the NSTimer Class Reference了解详情。

答案 1 :(得分:0)

另一种方法是你可以使用两个定时器:

var myTimer = NSTimer()
var secondTimer = NSTimer()

之后你可以这样设置两个计时器:

myTimer =  NSTimer.scheduledTimerWithTimeInterval(0, target: self,
    selector: "searchForTRuckDrivers", userInfo:nil, repeats: false)
secondTimer =  NSTimer.scheduledTimerWithTimeInterval(10, target: self,
    selector: "searchForTRuckDrivers", userInfo:nil, repeats: true)

您可以设置延迟为0的第一个定时器,在设置另一个延迟为10的定时器时不再重复,它会一次又一次地重复。

在方法之后,您可以通过以下方式使第一个计时器无效:

func searchForTRuckDrivers() {        
    if myTimer.valid {
        myTimer.invalidate()
    }
}

这将删除第一个计时器,但第二个计时器将延迟调用此方法。

希望它会有所帮助。