IOS开发笔记——实现倒计时

先上代码:

-(void)setupCountDown{
__block int timeout=60;
@weakify(self);
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||isCancel){
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
@strongify(self);
self.buttonForSendVerifyCode.enabled = YES;
[self.buttonForSendVerifyCode setTitle:@”发送验证码” forState:UIControlStateNormal];
self.buttonForSendVerifyCode.userInteractionEnabled = YES;
});
}else{
int seconds = (timeout-1) % 60;
NSString *strTime = [NSString stringWithFormat:@”%.2d”, seconds];
dispatch_async(dispatch_get_main_queue(), ^{
@strongify(self);
self.buttonForSendVerifyCode.enabled = NO;
[self.buttonForSendVerifyCode setTitle:[NSString stringWithFormat:@”再次获取(%@秒)”,strTime] forState:UIControlStateNormal];
self.buttonForSendVerifyCode.userInteractionEnabled = NO;
self.buttonForSendVerifyCode.titleLabel.lineBreakMode = 0;
});
timeout–;
}
});
dispatch_resume(_timer);
}

以上:

1、dispatch_get_global_queue(long identifier, unsigned long flags);用于获取全局的队列,identifier指定优先级,flags为保留字段,一般置为0;

2、dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); 表示每隔1秒执行一次,误差时间为0;

3、dispatch_async(dispatch_queue_t queue, dispatch_block_t block); 提交一个异步执行的block到一个dispatch队列,并且立即执行。适用于block很费时的操作,用异步不会影响主线程的UI操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值