最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
iOS开发之实现商品倒计时效果
时间:2022-06-25 23:39:50 编辑:袖梨 来源:一聚教程网
一.倒计时(如:发送验证码)
#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中的倒计时非常的接近的哦各位应该懂了吧。
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22