我有一个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];
}
答案 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发送无效消息将不执行任何操作。此外,通过这种方式,您可以避免安排超过必要的计时器,如果用户多次按下启动,您只需忽略它。