美文网首页
经验拾遗之GCD倒计时按钮

经验拾遗之GCD倒计时按钮

作者: saintPN | 来源:发表于2016-03-22 22:19 被阅读0次

  一看就懂demo,地址:github

  在开发中,最常见用到倒计时按钮的场景应该是获取短信的时候,当点击获取后,需要隔一段时间才能再次获取,下面,来用gcd(而不是timer)来实现一下。

1.首先创建一个button,SB或者代码均可,设置好文字和颜色。

2.点击后,用gcd实现倒计时:

__weak  typeof(self) wSelf = self;

//设置倒计时长,注意,在block需要更改对象的话,需要首先用__block声明

int __block time = 10;

self.countdownButton.enabled = NO;

//获取系统全局队列

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);

//设置定时器为点击后马上开始,间隔时间为1秒,没有延迟

dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, 0), 1*NSEC_PER_SEC, 0);

dispatch_source_set_event_handler(timer, ^{

if (time == 0) {

wSelf.countdownButton.enabled = YES;

dispatch_source_cancel(timer);

dispatch_async(dispatch_get_main_queue(), ^{

wSelf.countdownButton.backgroundColor = [UIColor orangeColor];

[wSelf.countdownButton setTitle:@"点击获取验证短信" forState:UIControlStateNormal];

});

} else {

time --;

NSString *string = [NSString stringWithFormat:@"%d秒后重新获取", time];

dispatch_async(dispatch_get_main_queue(), ^{

wSelf.countdownButton.backgroundColor = [UIColor cyanColor];

[wSelf.countdownButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[wSelf.countdownButton setTitle:string forState:UIControlStateNormal];

});

}

});

//初始状态默认是挂起,创建后必须手动恢复

dispatch_resume(timer);

3.比起timer可能会有的问题,gcd是很好的异步实现方式,简单明了,下面是最终效果:

相关文章

  • 经验拾遗之GCD倒计时按钮

    一看就懂demo,地址:github 在开发中,最常见用到倒计时按钮的场景应该是获取短信的时候,当点击获取后,...

  • 倒计时

    Requirements 实现按钮倒计时: 基于GCD的倒计时 github链接:https://github.c...

  • GCD实现倒计时按钮

    在常规项目中,经常会使用到定时器.我收集了一下实现方法记下来.

  • iOS开发之倒计时显示(GCD)

    1.关于GCD倒计时,实际开发中遇到的问题在于线程使用,要知道倒计时每次改变都是在主线程对按钮的UI进行重新绘制,...

  • GCD-倒计时的使用

    GCD 倒计时 使用

  • iOS UIButton倒计时、指示器、粒子效果

    前言 分享三款按钮来使用, 倒计时按钮,指示器按钮,点赞粒子效果按钮 倒计时按钮 Property & API 简...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • 倒计时按钮

    给按钮加倒计时的代码 1、声明属性 2、在viewDidLoad中设置按钮初状态 3、在按钮触发方法中触发倒计时计...

  • RAC 实现按钮倒计时

    RAC 实现按钮倒计时

  • GCD拾遗

    写在前面 差不多已经有半年没有更新简书了,最近考虑换工作,参加了几次面试,印象最深的是面试官提问怎么理解“多线程中...

网友评论

      本文标题:经验拾遗之GCD倒计时按钮

      本文链接:https://www.haomeiwen.com/subject/kxellttx.html