Objective-C:NSTimer和倒计时

Pan*_*ios 4 objective-c nstimer countdown xcode4

我知道我应该了解Apple的NSTimer文档,但我不知道!我也读了很多关于它的问题,但找不到适合我的情况.那么这里是:

用户通过文本字段输入小时和分钟.我将它们转换为整数并将它们显示在"countDownLabel"中.

  1. 如何将计数降至零?
  2. 显示用户没有导入的秒数会很好,但我想它不会很难显示.
  3. 怎么有人可以通过按UIButton来停止这个程序?

我知道我要求很多...如果有人可以提供帮助我真的很感激!

int intHourhs;
intHourhs=([textHours.text intValue]);
int intMinutes;
intMinutes=([textMinutes.text intValue]);
int *intSeconds;
intSeconds=0;

NSString *stringTotalTime=[[NSString alloc] initWithFormat:@"%.2i:%.2i:%.2i",intHourhs,intMinutes,intSeconds]; 
[countDownLabel setFont:[UIFont fontWithName:@"DBLCDTempBlack" size:45]];
countDownLabel.text=stringTotalTime;
Run Code Online (Sandbox Code Playgroud)

jba*_*100 17

首先,您应该计算您的倒计时时间,以秒为单位,并将其放入实例变量(ivar)

NSTimeInterval totalCountdownInterval;
Run Code Online (Sandbox Code Playgroud)

我认为为了保持良好的准确性(NSTimer发射可以关闭多达100毫秒并且错误会加起来)你应该记录倒计时开始的日期,并把它放在另一个ivar中:

NSDate* startDate = [NSDate date];
Run Code Online (Sandbox Code Playgroud)

然后,您可以定期(此时为1秒)定时触发计时器,重复调用您班上的方法

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkCountdown:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)

在该方法中,您可以根据总倒计时时间检查已用时间并更新界面

-(void) checkCountdown:(NSTimer*)_timer {

    NSTimeInterval elapsedTime = [[NSDate date] timeIntervalSinceDate:startDate];

    NSTimeInterval remainingTime = totalCountdownInterval - elapsedTime;

    if (remainingTime <= 0.0) {
        [_timer invalidate];
    }

    /* update the interface by converting remainingTime (which is in seconds)
       to seconds, minutes, hours */

}
Run Code Online (Sandbox Code Playgroud)