秒表暂停/恢复按钮

时间:2013-12-24 14:01:40

标签: ios nstimer

我有一个NSTimer作为秒表。我想拥有它,所以我可以使用相同的按钮暂停和恢复它。我曾试图使用BOOL,但我没有运气。

-(IBAction)pause:(id)sender {

    if (running == true) {
        [myticker invalidate]; {

        } else if(running == false) {
            myticker = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
        }
      }
}

-(IBAction)start:(id)sender {
    running=true;
    baseDate = [NSDate date];
    myticker = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
}

-(void)showActivity {
    NSTimeInterval interval = [baseDate timeIntervalSinceNow];
    double intpart;
    double fractional = modf(interval, &intpart);
    NSUInteger hundredth = ABS((int)(fractional*100));
    NSUInteger seconds = ABS((int)interval);
    NSUInteger minutes = seconds/60;
    NSUInteger hours = minutes/60;
    time.text = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", hours, minutes%60, seconds%60, hundredth];
}

1 个答案:

答案 0 :(得分:0)

你有点复杂。

当你使计时器失效时,你可以简单地将你的计时器弄清楚,然后你可以检查它是否存在。另外你正在做的事情可以创建多个计时器,因为我相信你可以在按下暂停之前多次按下开始。

您可以这样做:

-(IBAction)start:(id)sender {
    if(!myticker) {    
        baseDate = [NSDate date];
        myticker = [NSTimer scheduledTimerWithTimeInterval:.01 
                                                    target:self
                                                  selector:@selector(showActivity)
                                                  userInfo:nil 
                                                   repeats:YES];
    }
 }

-(IBAction)pause:(id)sender {
    if(!myticker)
       myticker = [NSTimer scheduledTimerWithTimeInterval:.01 
                                                    target:self
                                                  selector:@selector(showActivity)
                                                  userInfo:nil 
                                                   repeats:YES];
    else {
        [myticker invalidate];
        myticker = nil;
    }
}

请注意,向无效的myticker发送无效消息将不执行任何操作。此外,通过这种方式,您可以避免安排超过必要的计时器,如果用户多次按下启动,您只需忽略它。