我的计时器没有重复请帮助
这是代码
timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(doAnimation:) userInfo:nil repeats:YES];
[timer fire];
方法
-(void)doAnimation:(id)Sender
{
}
答案 0 :(得分:6)
[timer fire]
仅手动触发计时器一次并且实际上并未“启动”计时器。来自docs:
您可以使用此方法触发重复计时器,而不会中断其常规发射计划。如果计时器不重复,它会在触发后自动失效,即使它的预定开火日期尚未到来。
在开始触发并重复之前,您需要在运行循环中add the timer:
您必须使用addTimer:forMode:将新计时器添加到运行循环中。然后,在经过秒秒后,计时器将触发,将消息aSelector发送到目标。 (如果计时器配置为重复,则无需随后将计时器重新添加到运行循环中。)
更简单的方法是做一些事情:
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doAnimation:) userInfo:nil repeats:YES];
和
-(void)doAnimation:(NSTimer*)timer
{
}
这个automatically schedules计时器并将其添加到运行循环中。如果您没有这样做,因为您已将目标设置为self
,您必须确保方法doAnimation
在同一个类中定义。
答案 1 :(得分:3)
使用timerWithTimeInterval要求您将其附加到运行循环。尝试使用
timer = [NSTimer scheduledTimerWithTimeInterval:1 target self selector:@selector(doAnimation:) userInfo:nil repeats:YES];
将您的doAnimation方法更改为以下内容:
-(void)doAnimation:(NSTimer *)timer{
// do Something
}
p.s为什么要告诉它立即开火?我觉得没必要。
答案 2 :(得分:1)
根据细节,我的猜测是你将计时器添加到线程上的运行循环,该线程在1秒钟之前退出。
示例:您在辅助线程上创建计时器,当辅助线程退出时,计时器将被销毁。
当线程死亡时,其运行循环终止,当其运行循环终止时,其定时器无效。
如果是这种情况,可以通过一种简单的方法将其添加到主运行循环中。
在某些情况下,您(当然)会想要在特定的运行循环或线程上使用计时器,但这种误解会给过去的人造成类似的问题。