您的位置:首页 > 移动开发 > IOS开发

iOS 倒计时方法——dispatch

2014-10-27 00:00 330 查看
今天做短信验证码倒计时的时候要用到倒计时,发现倒计时也不是很好做,想用和上次做动画一样的方法设置多线程来解决却完全行不通。只有在网上继续找解决方法,下面的这个方法虽然不太适合短信验证码的倒计时,因为每次变换数字的时候会消失一下在出现,不过可能以后会用在其他地方,所以我就留下来了。

直接上代码了
- (void)timeCount{//倒计时函数
     __block int timeout=59; //倒计时时间
    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),0.5*NSEC_PER_SEC, 0); //每0.5秒执行
    dispatch_source_set_event_handler(_timer, ^{
        if(timeout<=0){ //倒计时结束,关闭
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                [_dynamicCode_btn setTitle:@"发送验证码" forState:UIControlStateNormal];//这里可以替换成自己需要的
                _dynamicCode_btn.userInteractionEnabled = YES;//这是我自己用的方法,这里可以替换成自己需要的
            });
        }else{
            int seconds = timeout % 60;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"____%@",strTime);
                [_dynamicCode_btn setTitle:[NSString stringWithFormat:@"倒计时 %@",strTime] forState:UIControlStateNormal];//这里可以替换成自己需要的
                [_dynamicCode_btn setTitle:strTime forState:UIControlStateNormal];//这里可以替换成自己需要的
                _dynamicCode_btn.userInteractionEnabled = NO;//按钮禁止点击
            });
            timeout--;
        }
    });
    dispatch_resume(_timer);
}

可以替换的部分我标出来了,其他没标的应该都是比较容易看懂的~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: