Objective-C: NSTimer和倒计时

4

我知道应该理解苹果的NSTimer文档,但我不懂!我也看了很多关于它的问题,但找不到适合我的例子。那么这就是:

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

  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;
2个回答

17

首先你应该计算出你的倒计时时间(以秒为单位),并将其存储在一个实例变量(ivar)中。

NSTimeInterval totalCountdownInterval;

我认为为了保持良好的准确性(NSTimer的触发可以相差100毫秒,误差会累加),你应该记录倒计时开始的日期,并将其放入另一个实例变量中:

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

}

0

这是一个很大的任务。但是从小步骤开始。您需要在类中创建一个方法,当调用它时(每N秒),将更新您想要更新的标签。然后,您安排一个计时器每N秒调用该方法。

有几种计时器变体可供使用,但对于此案例,最直接的可能是NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

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


感谢您的时间!您能否请将您建议的方法转换为我的数据? - Pantelis Proios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接