美文网首页iOSiOS Blog111
基于GCD的倒计时

基于GCD的倒计时

作者: 千煌89 | 来源:发表于2014-11-20 10:36 被阅读1120次

    源码


    + (void)countDownWithTime:(int)time
               countDownBlock:(void (^)(int timeLeft))countDownBlock
                     endBlock:(void (^)())endBlock
    {
        __block int timeout = time; //倒计时时间
        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){ //倒计时结束,关闭
                dispatch_source_cancel(_timer);
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (endBlock) {
                        endBlock();
                    }
                });
            } else {
                dispatch_async(dispatch_get_main_queue(), ^{
                    timeout--;
                    if (countDownBlock) {
                        countDownBlock(timeout);
                    }
                });     
            }
        });
        dispatch_resume(_timer);
    }
    

    例子


    - (void)startCount
    {
        [ZXCountTimeHelper countDownWithTime:60 countDownBlock:^(int timeLeft) {
            int seconds = timeLeft % 60;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            //设置界面的按钮显示 根据自己需求设置
            [_getCodeButton setTitle:[NSString stringWithFormat:@"(%@)秒后重新发送",strTime] forState:UIControlStateNormal];
            _getCodeButton.enabled = NO;
        } endBlock:^(void) {
            [_getCodeButton setTitle:@"获取短信验证码" forState:UIControlStateNormal];
            _getCodeButton.enabled = YES;
        }];
    }
    

    12月31日更新


    我在ios7上试了一下,倒计时是会卡住的,在ios8上是没问题的,这是_getCodeButton.enabled = YES;的问题,貌似enabled=NO之后,就不能继续修改了,可以改成userInteractionEnabled。或者大家有更好的解决方法?

    相关文章

      网友评论

      本文标题:基于GCD的倒计时

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