NSTimer Lap Time iPhone - PullRequest
       4

NSTimer Lap Time iPhone

0 голосов
/ 20 ноября 2011

Это мой код для моего секундомера.Все работает, кроме функции кнопки на коленях.Как я смогу реализовать время круга, когда при нажатии действия ib «круг» оно будет хранить текущее время в массиве и перечислять время круга в представлении?

Я уже пытался создатьбаза данных, но это казалось слишком сложным для чего-то подобного.

#import "FirstViewController.h"

@implementation FirstViewController
@synthesize start;
@synthesize stop;
@synthesize lap;
@synthesize reset;
@synthesize lapLabel;
@synthesize stopWatchLabel;

NSDate *startDate;
NSDateFormatter *dateFormatter;
NSTimer *stopWatchTimer;
NSTimeInterval secondsAlreadyRun;


int touchCount;



-(void)showActivity:(NSTimer *)tim {

    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    // Add the saved interval
    timeInterval += secondsAlreadyRun;
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"mm:ss.SS"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    stopWatchLabel.text = timeString;

}

- (IBAction)onStartPressed:(UIButton *)sender {

    stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1/10 
                                                      target:self 
                                                    selector:@selector(showActivity:) 
                                                    userInfo:nil 
                                                     repeats:YES];
    // Save the new start date every time
    startDate = [[NSDate alloc] init]; // equivalent to [[NSDate date] retain];
    [stopWatchTimer fire];

    touchCount +=1;
    if (touchCount == 1) 
    {
        start.hidden = YES;
        stop.hidden = NO;
        reset.hidden = YES;
        lap.hidden = NO;
        touchCount = 0;
    }

}

- (IBAction)onStopPressed:(UIButton *)sender {
    // _Increment_ secondsAlreadyRun to allow for multiple pauses and restarts
    secondsAlreadyRun += fabs([startDate timeIntervalSinceNow]);
    [stopWatchTimer invalidate];
    stopWatchTimer = nil;
    stop.hidden = YES;
    start.hidden = NO;
    reset.hidden = NO;
    lap.hidden = YES;

}

- (IBAction)reset:(UIButton *)sender; {
    secondsAlreadyRun = 0;
    stopWatchLabel.text = @"00:00.00";
}

- (IBAction)lap:(UIButton *)sender; {
    //Lap Code will go here.

}

- (void)viewDidUnload {
    [self setStart:nil];
    [self setStop:nil];
    [self setLap:nil];
    [self setReset:nil];
    [self setLap:nil];
    [super viewDidUnload];
}
@end

1 Ответ

0 голосов
/ 01 марта 2012

Просто используйте NSMutableArray, хранящийся в классе. Каждый раз, когда человек нажимает кнопку на коленях Например, позвоните

NSMutableArray *lapTimes;

А по твоему методу сделай:

- (IBAction)lap:(UIButton *)sender {
    double timeSinceStart = [startDate timeIntervalSinceNow];
    [lapTimes addObject:[NSNumber numberWithDouble:-timeSinceStart]];
}

timeIntervalSinceNow будет возвращать разницу во времени между объектом NSDate и теперь в секундах. Если NSDate раньше, чем сейчас (как в вашем случае), возвращаемое число будет отрицательным, поэтому вам придется его инвертировать.

...