倒计时方法

    //ButtonCountDown.h
    +(void)countDownButton:(UIButton *)sender withTitle:(NSString *)title withBackgroundColor:(UIColor* )color withCountDownTime:(NSInteger)timeNum;

    //ButtonCountDown.m
    +(void)countDownButton:(UIButton *)sender withTitle:(NSString *)title withBackgroundColor:(UIColor* )color withCountDownTime:(NSInteger)timeNum{
__block NSInteger time = timeNum; //倒计时时间

//    [sender setTitle:@"重新发送" forState:UIControlStateNormal];
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(time <= 0){ //倒计时结束,关闭
        dispatch_source_cancel(_timer);
        dispatch_async(dispatch_get_main_queue(), ^{
            [sender setTitleColor:color forState:UIControlStateNormal];
            [sender setTitle:title forState:UIControlStateNormal];
            sender.userInteractionEnabled = YES;
        });
    }else{
        int seconds = time % 60;
        dispatch_async(dispatch_get_main_queue(), ^{
            //设置按钮显示读秒效果
            [sender setTitle:[NSString stringWithFormat:@"%.2dS", seconds] forState:UIControlStateNormal];
            [sender setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
            sender.userInteractionEnabled = NO;
        });
        time--;
    }
});
dispatch_resume(_timer);
}

推荐阅读更多精彩内容

  • 这次数学期中考试,我和第一名差了两分,确实,我有希望考班级第一。 首先就是我的耐性还是不够,在一道题上停留十分钟就...
    写作中的小猪阅读 155评论 1 11
  • 完成今天的复习计划时,已经是11点半了。 今天过的很充实。 但奇怪的是,我是一个比较拖延的人,但这几天我竟然克制住...
    阿霖读书阅读 58评论 0 5
  • 在我们平时的工作中,工作方法非常重要。古人也有很多关于方法的说法,工欲善其事,必先利其器。如果能采取正确的方法,会...
    窗边树阅读 101评论 0 5
  • 做计划的时候我们总是信心满满,好像自己的目标马上就要实现了一样。但是到底具体实施起来的情况怎么样?到一个时间节点的...
    窗边树阅读 93评论 0 7
  • 教师资格证倒计时31天啦,你们准备的怎么样了? 我已经刷完了15-18年的试卷,还剩19年的没刷。 刷完试卷,我一...
    逢考必过大头阅读 205评论 1 14