如何暂停和恢复多个NSTimer?

时间:2015-11-06 07:03:17

标签: ios objective-c iphone nstimer

我想播放一个声音(铃声),其中包含多个scheduledTimerWithTimeInterval设置,例如Every 5,Every 9 Every 35 after 6 ....等等,现在我Bell开始玩Interval 55,56,59,60,45,42。 ...但我希望在52上暂停时间然后我使所有计时器无效,因为没有得到暂停方法或NSTimer的属性之后我再次启动计时器以新的间隔开始,如48,47,43 ....但我想保持旧时间间隔所以任何人都有这个想法,请帮助我。

-(void) bellsSchedual {
    arrBellsListAllData = [DBModel getDataFromBellsList:prop.userId];
    DBProperty *bellProp = [[DBProperty alloc]init];

    for (int i = 0; i < arrBellsListAllData.count; i++) {
        bellProp=[arrBellsListAllData objectAtIndex:i]; 
        NSString* bellsTime=bellProp.bTime; 
        if ([bellProp.bTimeSchedule isEqualToString: @"after"]) {
            NSTimer* bellTimer = [NSTimer scheduledTimerWithTimeInterval: [bellsTime intValue] 
                                                                  target: self 
                                                                selector: @selector(playSound:) 
                                                                userInfo: nil 
                                                                 repeats: NO]
            [arrTimers addObject:bellTimer]; 
        } else if ([bellProp.bTimeSchedule isEqualToString: @"every"]) {
            NSTimer* bellTimer = [NSTimer scheduledTimerWithTimeInterval: [bellsTime intValue] 
                                                                  target: self 
                                                                selector: @selector(playSound:) 
                                                                userInfo: nil 
                                                                 repeats: YES]; 
            [arrTimers addObject: bellTimer]; 
        } 
   } 
} 

由于

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您需要一个可以暂停的计时器,并且已正确确定NSTimer无法暂停。

你可以在大纲中考虑的是:

  1. 您自己的计时器类,它提供了一个方法,比如说tick,它会导致计时器进展。每个钟都使用这个类的实例;和
  2. 使用重复的NSTimer来提供勾号 - 当它触发时,它会调用所有已注册的自定义计时器的tick方法。使此NSTimer无效将停止滴答,有效地暂停自定义计时器。创建新的NSTimer以提供刻度将重新启动您的自定义计时器。
  3. HTH

答案 1 :(得分:0)

问题不是很清楚...... 据我了解,每个铃声都有它自己的计时器和不同的间隔时间。

将属性bCurrentTime添加到bellProp。您在重置系统或创建bellProp对象时将其设置为bTime。

在您点击计时器而不是bTime时使用此值。

在playSound方法中,使用当前时间间隔更新此值。

这样,当您使所有计时器无效并重新启动它们时,将存储以前的所有时间。

添加重置方法将所有铃声bCurrentTime设置为bTime。

答案 2 :(得分:0)

如果您想控制计时器,则需要将它们设为属性。这样,您就可以在声明它们的文件的整个范围内启动,停止和执行任何操作。