一.倒计时(如:发送验证码)
#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中的倒计时非常的接近的哦各位应该懂了吧。
荒野乱斗国际版 (BrawlStars)最新版本v56.274
下载一波超人内置修改器菜单版 安卓版v1.0.2
下载敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载继承了一座戏园子无限声望铜钱版 内置菜单最新版v1.7
继承了一座戏园子折相思版是游戏的破解版本,在该版本中为玩家提
山河半世橙光清软金手指版 无限鲜花v3.24
山河半世是一款超级好玩的橙光恋爱游戏,在游戏中玩家们需要扮演
蓬莱手游折相思版 安卓版v1.0.0
蓬莱免广告版是游戏的修改版本,在该版本中为玩家去除了广告,玩
当红影后橙光游戏破解版2025 最新版v1.0
当红影后橙光破解版是一款超级好玩的娱乐圈题材的橙光游戏,在这
忽然成了万人迷清软完结版 无限鲜花版v12.15
忽然成了万人迷破解版是一款非常好玩的男性向橙光游戏,在有一天