问题
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