How to add the output of multiple timers

百般思念 提交于 2019-12-11 12:35:43

问题


My utility app will have 20 individual timers, laid out like this:

- (void)updateTimer
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];
stopWatchLabel.text = timeString;
[dateFormatter release];
}

- (IBAction)onStartPressed:(id)sender {
startDate = [[NSDate date]retain];

// Create the stop watch timer that fires every 1 s
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self
                                                selector:@selector(updateTimer)
                                                userInfo:nil
                                                 repeats:YES];
}

- (IBAction)onStopPressed:(id)sender {
[stopWatchTimer invalidate];
stopWatchTimer = nil;
[self updateTimer];
}

I would like to add all of the time intervals together, and display them as a string. I thought this would be easy, but I just can't get it. I need to sum the NSTimeIntervals, right?


回答1:


Several approaches you could take. One is to create a timer class that that can be queried for its state (running, stopped, not started, ...) and for its current time interval. Add all of the timers to a collections such as an NSMutableArray. You could then iterate over all the timers in the collection, and for those that are stopped, get its time interval, and sum them together. The partial header for a MyTimer class:

enum TimerState {
    Uninitialized,
    Reset,
    Running,
    Stopped
};

typedef enum TimerState TimerState;

#import <Foundation/Foundation.h>

@interface MyTimer : NSObject

@property (nonatomic) NSTimeInterval timeInterval;
@property (nonatomic) TimerState state;

- (void) reset;
- (void) start;

@end 

Declare your array:

#define MAX_TIMER_COUNT 20
NSMutableArray *myTimerArray = [NSMutableArray arrayWithCapacity:MAX_TIMER_COUNT];

Add each timer to the array:

MyTimer *myTimer = [[MyTimer alloc] init];
[myTimerArray addObject:myTimer];

When appropriate, iterate over the collection of timers and sum the time intervals for the Stopped timers:

NSTimeInterval totalTimeInterval = 0.0;
for (MyTimer *timer in myTimerArray){
    if (timer.state == Stopped) {
        totalTimeInterval += timer.timeInterval;
    }
}


来源:https://stackoverflow.com/questions/13215234/how-to-add-the-output-of-multiple-timers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!