如何更改 NSTimer 的计时?
我有以下代码:
timer = [[NSTimer scheduledTimerWithTimeInterval:0.50 target:self selector:@selector(onTimer) userInfo:nil repeats:YES] retain];
-(void) onTimer
{
}
每 0.50 秒调用一次 OnTimer
方法。
但现在我想增加时间间隔。
这意味着:
OnTimer calls after 0.55
OnTimer calls after 0.60
OnTimer calls after 0.65
OnTimer calls after 0.70
OnTimer calls after 0.75
& so on.
有什么解决办法吗?我已经尝试了很多,但它不起作用。
I have the following code:
timer = [[NSTimer scheduledTimerWithTimeInterval:0.50 target:self selector:@selector(onTimer) userInfo:nil repeats:YES] retain];
-(void) onTimer
{
}
After every 0.50 seconds the OnTimer
method is called.
But now I want to increment the time-interval.
That means:
OnTimer calls after 0.55
OnTimer calls after 0.60
OnTimer calls after 0.65
OnTimer calls after 0.70
OnTimer calls after 0.75
& so on.
Is there any solution for this?? I have tried lot but its not working.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
当然你可以做到这一点。将
repeats:YES
更改为repeats:NO
以便计时器不重复,然后在onTimer
中,只需使用间隔较长。您需要一个变量来保存间隔,以便每次通过onTimer
可以将间隔延长一点。另外,您可能不再需要保留计时器,因为它只会触发一次,当它触发时,您将获得一个新的计时器。我不是 Objective-C 专家(或 iOS 专家...),虽然已经有一段时间了,但我想的是这样的:
类似这样的东西?哦,我真的不太确定这里的
retain
语义...阅读文档以确保不会泄漏!Sure you can do this. Change
repeats:YES
torepeats:NO
so that the timer doesn't repeat, and then inonTimer
, just start a new timer with a longer interval. You need a variable to hold your interval so that you can make it a bit longer each time throughonTimer
. Also, you probably don't need to retain the timer anymore, as it will only fire once, and when it does, you'll get a new timer.I'm no Objective-C expert (or iOS expert...) and it's been a while but I think something like this:
Something like that? Oh, and I'm really not too sure about the
retain
semantics here... read the docs to make sure you don't leak!这是使用 NSTimer 的 fireDate 属性(用 Swift 编写)解决 Hardik 问题的一种解决方案:
Swift 2
Swift 3, 4, 5
Here is one solution to Hardik's question using NSTimer's fireDate property (written in Swift):
Swift 2
Swift 3, 4, 5
您可以尝试调整计时器的 FireDate,请参阅
setFireDate
You could try adjusting the timer's FireDate, see
setFireDate
您无法更改计时器触发的时间间隔。决不。没有 API 可以执行此操作。
两个明显的解决方法:如果您总是更改间隔,那么您可以更改计时器下次触发的时间;这优先于计时器间隔。当然,每次计时器触发时您都必须这样做。如果您有时更改间隔,只需使第一个计时器无效并使用新间隔创建一个新计时器即可。
You can't change the interval at which a timer fires. No way. There's no API for doing this.
Two obvious workarounds: If you always change the interval, then you can just change the next time that the timer fires; this has precedence over the timer interval. Of course you have to do that every time the timer fires. If you sometimes change the interval, just invalidate the first timer and create a new timer with the new interval.
这对我来说就像魅力一样。
This just work like charm for me.