一.倒计时(如:发送验证码)
#define countDownTime 119 //倒计时时间
#pragma mark - 倒计时
- (void)myTimer
{
if (countDownTime) {
__block int timeout= countDownTime; //倒计时时间
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(timer, ^{
if(timeout < 0){ //倒计时结束,关闭
dispatch_source_cancel(timer);
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
});
}else{
int hours = timeout / (60 * 60);
int minute = timeout % (60 * 60) / 60;
int seconds = timeout % 60;
if (hours < 10) {
hours = [[NSString stringWithFormat:@"0%d",hours] intValue];
}
if (minute < 10) {
minute = [[NSString stringWithFormat:@"0%d",minute] intValue];
}
if (seconds < 10) {
seconds = [[NSString stringWithFormat:@"0%d",seconds] intValue];
}
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
hourLabel.text = [NSString stringWithFormat:@"%d",hours];
minuteLabel.text = [NSString stringWithFormat:@"%d",minute];
secondsLabel.text = [NSString stringWithFormat:@"%d",seconds];
if (hours < 10) {
hourLabel.text = [NSString stringWithFormat:@"0%d",hours];
}
if (minute < 10) {
minuteLabel.text = [NSString stringWithFormat:@"0%d",minute];
}
if (seconds < 10) {
secondsLabel.text = [NSString stringWithFormat:@"0%d",seconds];
}
[UIView commitAnimations];
});
timeout--;
}
});
dispatch_resume(timer);
}
}
二.倒计时(并计算时间差)
全局变量:dispatch_source_t _timer;
#pragma mark - 倒计时
- (void)countDown{
NSDate *now = [NSDate date];
NSDateFormatter *formatDay = [[NSDateFormatter alloc] init];
formatDay.dateFormat = @"yyyy-MM-dd";
NSString *dayStr = [formatDay stringFromDate:now];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *endDate = [dateFormatter dateFromString:dayStr];
NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + 24 * 3600)];
NSDate *startDate = [NSDate date];
NSTimeInterval timeInterval =[endDate_tomorrow timeIntervalSinceDate:startDate];
if (_timer == nil) {
__block int timeout = timeInterval; //倒计时时间
if (timeout != 0) {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0 * NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(_timer, ^{
if(timeout <= 0){ //倒计时结束,关闭
dispatch_source_cancel(_timer);
_timer = nil;
dispatch_async(dispatch_get_main_queue(), ^{
hourLabel.text = @"00";
minuteLabel.text = @"00";
secondsLabel.text = @"00";
});
}else{
int hours = (int)(timeout / 3600);
int minutes = (int)(timeout - hours * 3600) / 60;
int seconds = timeout - hours * 3600 - minutes * 60;
dispatch_async(dispatch_get_main_queue(), ^{
if (hours < 10) {
hourLabel.text = [NSString stringWithFormat:@"0%d",hours];
}else{
hourLabel.text = [NSString stringWithFormat:@"%d",hours];
}
if (minutes < 10) {
minuteLabel.text = [NSString stringWithFormat:@"0%d",minutes];
}else{
minuteLabel.text = [NSString stringWithFormat:@"%d",minutes];
}
if (seconds < 10) {
secondsLabel.text = [NSString stringWithFormat:@"0%d",seconds];
}else{
secondsLabel.text = [NSString stringWithFormat:@"%d",seconds];
}
});
timeout--;
}
});
dispatch_resume(_timer);
}
}
}
例子三
__block int timeout=59; //倒计时时间
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(aSelf.timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(aSelf.timer, ^{
if(timeout<=0){ //倒计时结束,关闭
dispatch_source_cancel(aSelf.timer);
aSelf.timer = nil;
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
});
}else{
// int minutes = timeout / 60;
int seconds = timeout % 60;
NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
});
timeout--;
}
});
dispatch_resume(aSelf.timer);
好了以上就是关于ios倒计时的一个实现方法了,这个和js中的倒计时非常的接近的哦各位应该懂了吧。
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔