我知道我应该了解Apple的NSTimer文档,但我不知道!我也读了很多关于它的问题,但找不到适合我的情况。那么这就是:
用户通过文本字段输入小时和分钟。我将它们转换为整数并将它们显示在“countDownLabel”中。
我知道我要求很多...如果有人可以提供帮助,我将非常感激!
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;
答案 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:)
。