一.倒计时(如:发送验证码)
#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中的倒计时非常的接近的哦各位应该懂了吧。
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级