Objective-C:NSTimer和倒计时

时间:2011-10-06 21:48:26

标签: objective-c xcode4 nstimer countdown

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

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

  1. 如何将倒计时降为零?
  2. 很高兴显示用户没有导入的秒数,但我想这不会很难显示。
  3. 怎么有人可以通过按UIButton来停止这个程序?
  4. 我知道我要求很多...如果有人可以提供帮助,我将非常感激!

    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;
    

2 个答案:

答案 0 :(得分:17)

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

NSTimeInterval totalCountdownInterval;

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

NSDate* startDate = [NSDate date];

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

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

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

-(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 */

}

答案 1 :(得分:0)

这是一个很大的订单。但是从婴儿步骤开始。您需要在类中创建一个方法,在调用时(每N秒),将更新要更新的标签。然后你安排一个计时器每隔N秒调用一次该方法。

您可能会使用多种计时器变体,但对于这种情况,最简单的可能是NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

将您的方法编写为- (void)timerFireMethod:(NSTimer*)theTimer,上面的计时器方法的选择器为@selector(timerFireMethod:)