ios. GCD 倒计时时间
//倒计时时间
__block int timeout = 60;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//创建globle队列
//创建timer 定时器
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
//每秒执行。 设置1s触发一次,0s的误差
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 源
dispatch_async(dispatch_get_main_queue(), ^{
//回主线程 更新UI 设置界面的按钮显示 根据自己需求设置
weakSelf.getCodeBtn.enabled = YES;
[weakSelf.getCodeBtn setTitle: @"获取验证码" forState:UIControlStateNormal];
});
}
else
{
int seconds = timeout % 60;
NSString *strTime = [NSString stringWithFormat:@"%.0d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//回主线程 更新UI 设置界面的按钮显示 根据自己需求设置
weakSelf.getCodeBtn.enabled = NO;
weakSelf.getCodeBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
if (strTime.length == 0) {
[self.getCodeBtn setTitle:[NSString stringWithFormat:@"验证码(60)"] forState:UIControlStateDisabled];
}
else
{
[self.getCodeBtn setTitle:[NSString stringWithFormat:@"验证码(%@)",strTime] forState:UIControlStateDisabled];
}
});
timeout--;
}
});
//开始执行dispatch源
dispatch_resume(_timer);
ios. GCD 倒计时时间的更多相关文章
- iOS GCD倒计时
GCD倒计时的好处在于不用考虑是否定时器无法释放的问题,runloop的问题,还有精度更加高 使用GCD创建定时器方法 -(void)startCountDown:(NSInteger)maxTime ...
- iOS验证码倒计时(GCD实现)
+ (void)verificationCode:(void(^)())blockYes blockNo:(void(^)(id time))blockNo { __block ; //倒计时时间 d ...
- iOS活动倒计时的两种实现方式
代码地址如下:http://www.demodashi.com/demo/11076.html 在做些活动界面或者限时验证码时, 经常会使用一些倒计时突出展现. 现提供两种方案: 一.使用NSTime ...
- iOS中倒计时
方法一:使用NSTimer来实现(比较适用于发送短信验证码倒计时) 主要是利用NSTimer的scheduledTimerWithTimeInterval方法来每秒执行一次changeTime方法 / ...
- GCD 倒计时
今天在Code4App上看了一个GCD倒计时的Demo,觉得不错代码贴出来备用 -(void)startTime{ __block ; //倒计时时间 dispatch_queue_t queue = ...
- iOS GCD之dispatch_semaphore(信号量)
前言 最近在看AFNetworking3.0源码时,注意到在 AFURLSessionManager.m 里面的 tasksForKeyPath: 方法 (L681),dispatch_semapho ...
- iOS GCD 拾遗
GCD里就有三种queue(分派队列)来处理. 1. Main queue:(主队列) 顾名思义,运行在主线程,由dispatch_get_main_queue获得.和ui相关的就要使用Main Qu ...
- ios实现倒计时的两种方法
方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMeth ...
- ecshop修改产品详情 折扣倒计时时间
文件:lefttime.js 位置:/js/lefttime.js 要求:去掉倒计时时间的 “天”数 原代码 ) { Temp = dateLeft + _day + hourZero + hour ...
随机推荐
- oracle 拼接字符串的两种方式
方式一:使用管道符||进行拼接 方式二:使用concat()函数 区别: 方式一可以拼接多个字符串:方式二只能将2个字符串拼接到一起. 写在最后 哪位大佬如若发现文章存在纰漏之处或需要补充更多内容 ...
- eclipse mavenWeb项目真正实现热部署(修改java代码和页面文件不用重启tomcat)
1.前言 首先,本文创作灵感源于博客园园作者signheart,特此鸣谢!原文链接见文末推荐: 百度都搜破了,全网讲的都是如何将maven项目部署到tomcat上,对于热部署的认知,真 ...
- 〖Linux〗Shell十进制数值转换十六进制
dec2hex(){ printf } a=$(dec2hex ) echo $a
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释(转)
原文:https://blog.csdn.net/yijiemamin/article/details/51156189# 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文 ...
- Dlib三维点云示例
Dlib三维点云示例 源代码来自Dlib的示例代码http://dlib.net/3d_point_cloud_ex.cpp.html 在windows下需要链接winmm``comctl32``gd ...
- 转 linux下php扩展mysqli的支持
前两天一个站点转移过来,因为给我的数据库有问题,我也没有仔细处理这个站点.今天把数据库弄好了,发现还是用不了,报的错误如下:Fatal error: Class ‘mysqli’ not found ...
- 基于git 客户端使用shell工具
1 定义全局启动 命令别名 C:\Program Files\Git\etc\profile.d\aliases.sh alias ls='ls -F --color=auto --show-cont ...
- Libevent例子(一)
服务器端 #include<stdio.h> #include<string.h> #include<errno.h> #include<event.h> ...
- 实现两个Mysql数据库同步
一. 概述 MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步.主从模式.互相备份模式的功能.本文档主要阐述了如何在linux系 ...
- 读书笔记--<精益和敏捷开发大型项目应用指南>
[摘要] 3月份的时候,根据教练和其他多为项目经理的推荐,开始阅读这本书:本书共三大部分.12个章节,第一部分:思考工具,第二部分:组织工具:第三部分:杂记:全书相当于对精益思想和敏捷团队组织.Scr ...