方法一:使用NSTimer来实现(比较适用于发送短信验证码倒计时)

主要是利用NSTimer的scheduledTimerWithTimeInterval方法来每秒执行一次changeTime方法

//创建一个Timer,每秒执行一次changeTime:方法

NSTimer * timer =[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime:) userInfo:nil repeats:YES];

//changeTime

-(void)changeTime:(NSTimer*)timer

{

//点击获取验证码的btn

UIButton * button = (UIButton*)[self.view viewWithTag:99];

if (count == 0) {

//完成后invalidate掉

[timer invalidate];

//59s倒计时

count = 59;

[button setTitle:@"重新获取" forState:UIControlStateNormal];

button.userInteractionEnabled = YES;

button.alpha = 1;

}

else{

[button setTitle:[NSString stringWithFormat:@"%d s",count] forState:UIControlStateNormal];

count--;

}

}

方法二:使用 GCD 来实现(比较使用于商家做某种活动的倒计时)

.h文件中定义一个Timer来控制时间

//倒计时Timer

dispatch_source_t _timer;

.m文件中实现:

//创建一个时间戳

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];

  //时间戳的格式

[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

  //将相同时间戳格式的NSString类型的数据转换成NSDate类型的数据

NSDate *endDate = [dateFormatter dateFromString:_EndTime];

NSDate *startDate = [dateFormatter dateFromString:_StartTime];

NSDate *currentDate = [dateFormatter dateFromString:_CurrentTime];

  //计算服务器当前时间距离活动结束的时间戳

NSTimeInterval timeInterval =[endDate timeIntervalSinceDate:currentDate];

  //计算服务器当前时间与活动开始时间的时间戳

NSTimeInterval StartToNow = [currentDate timeIntervalSinceDate:startDate];

  //倒计时时间

__block int timeout = timeInterval;

__block int StartTimeout = StartToNow;

if (timeout!=0) {

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 并行队列

// 并行队列可以同时处理多个任务,在不得以的情况下可以用dispatch_queue_create创建,但一般我们都要用系统预定义的并行队列,即全局队列(Global // Concurrent Dispatch Queues)。目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_queue来获取它们。

//dispatch_get_global_queue第一个参数是队列的优先级,分别对应四个全局队列:

//DISPATCH_QUEUE_PRIORITY_HIGH

//DISPATCH_QUEUE_PRIORITY_DEFAULT

//DISPATCH_QUEUE_PRIORITY_LOW

//DISPATCH_QUEUE_PRIORITY_BACKGROUND

 

//dispatch_get_global_queue中第二个参数目前系统保留,请设置为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 || StartTimeout <=0){

dispatch_source_cancel(_timer);

_timer = nil;

//在队列中运行任务

//你可以随时向一个队列中添加一个新任务,只需要调用一下dispatch_async即可:

dispatch_async(dispatch_get_main_queue(), ^{

  //可以根据自己需求设计需要显示的内容及展现格式、风格等

dayLabel.text = @"0天";

hourLabel.text = @"00 :";

minLabel.text = @"00 :";

secLabel.text = @"00";

label.text = @"抢购结束!!!";

});

}else{

label.text = @"抢购剩余时间:";

int days = (int)(timeout/(3600*24));

if (days==0) {

dayLabel.text = @"";

}

int hours = (int)((timeout-days*24*3600)/3600);

int minute = (int)(timeout-days*24*3600-hours*3600)/60;

int second = timeout-days*24*3600-hours*3600-minute*60;

dispatch_async(dispatch_get_main_queue(), ^{

if (days==0) {

dayLabel.text = @"0天";

}else{

dayLabel.text = [NSString stringWithFormat:@"%d天",days];

}

if (hours<10) {

hourLabel.text = [NSString stringWithFormat:@"0%d :",hours];

}else{

hourLabel.text = [NSString stringWithFormat:@"%d :",hours];

}

if (minute<10) {

minLabel.text = [NSString stringWithFormat:@"0%d :",minute];

}else{

minLabel.text = [NSString stringWithFormat:@"%d :",minute];

}

if (second<10) {

secLabel.text = [NSString stringWithFormat:@"0%d",second];

}else{

secLabel.text = [NSString stringWithFormat:@"%d",second];

}

});

timeout--;

}

});

dispatch_resume(_timer);

}

iOS中倒计时的更多相关文章

  1. ios 中倒计时计算,时间戳为NaN

    // 倒计时 daojishi(params) { let _this = this; let datetemp = this.servertimes; let lasttime = Date.par ...

  2. iOS中如何实现准确的倒计时程序 · 九十里

    iOS中倒计时程序,考虑线程暂停场景. iOS App进入后台时,GCD线程也会跟着暂停.当程序进入前台后,GCD线程恢复.因而倒计时程序需要考虑这一点,通过加入时间的比对来实现. + (void)c ...

  3. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

  4. iOS中支付宝集成

    iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...

  5. iOS中数据库应用基础

    iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...

  6. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  7. iOS 中的 HotFix 方案总结详解

    相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...

  8. iOS中使用正则

    一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  9. IOS中div contenteditable=true无法输入

    在IOS中<div contenteditable="true"></div>中点击时可以弹出键盘但是无法输入.加一个样式-webkit-user-sele ...

随机推荐

  1. ubuntu14.04使用IceGridAdmin图形界面

    打开网页: http://www.rpmfind.net/linux/RPM/index.html输入搜索: icegrid-gui下载文件: icegrid-gui-3.5.1-2.mga4.x86 ...

  2. 想从事分布式系统,计算,hadoop等方面,需要哪些基础,推荐哪些书籍?--转自知乎

    作者:廖君链接:https://www.zhihu.com/question/19868791/answer/88873783来源:知乎 分布式系统(Distributed System)资料 < ...

  3. 如何使用DDMS Heap查看Android应用内存情况

    作为大四毕业生,而且还是二本,加上技术基础不咋样,找工作自然也是辛酸得很...最糟糕的情况就是一开始实在是太小看了求职之路的艰辛,整个9月都是无所事事的度过,直到月底面试腾讯被鄙视后才顿然醒悟,意识到 ...

  4. 使用Spark分析拉勾网招聘信息(一):准备工作

    本系列专属github地址:https://github.com/ios122/spark_lagou 前言 我觉得如果动笔,就应该努力地把要说的东西表达清楚.今后一段时间,尝试下系列博客文章.简单说 ...

  5. zabbix配fpmmm(mpm)数据传送不了问题解决

    我们环境用zabbix mpm来监控mysql,不过最近官网已经不叫mpm了,而是叫fpmmm,理由为: fpmmm is the successor of mpm. mpm was renamed ...

  6. WatiN框架学习

    WatiN 是一个源于 Watir的工具,开源且用于web测试自动化的类库.Web Application Testing in .NET. WatiN 通过与浏览器的交互来实现自动化,使用起来具有轻 ...

  7. MyEclipse搭建SSM框架(Spring+MyBatis+SpringMVC)

    待写. 参考网址 http://www.cnblogs.com/Joetao/articles/4544572.html http://www.cnblogs.com/verlen11/p/53497 ...

  8. AC自动机 - 多模式串的匹配运用 --- HDU 2896

    病毒侵袭 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=2896 Mean: 略 analyse: AC自动机的运用,多模式串匹配. ...

  9. 循序渐进开发WinForm项目(3)--Winform界面层的项目设计

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  10. C#实用杂记-EF全性能优化技巧

    原文链接:http://www.makmong.com/947.html#comment-31 EntityFramework 优化建议 2016年1月15日 下午4:54 LEILINKANG   ...