ios. GCD 倒计时时间

本文介绍了一种使用GCD(Grand Central Dispatch)实现倒计时功能的方法,通过创建全局队列和定时器来控制倒计时进度,并在倒计时结束后自动关闭定时器,同时更新界面元素状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        //倒计时时间

            __block int timeout = 60;

            

            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//创建globle队列

            //创建timer 定时器

            dispatch_source_t  _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

             //每秒执行。 设置1s触发一次,0s的误差

            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 源

                    dispatch_async(dispatch_get_main_queue(), ^{

                        //回主线程  更新UI   设置界面的按钮显示 根据自己需求设置

                        weakSelf.getCodeBtn.enabled = YES;

                        [weakSelf.getCodeBtn setTitle: @"获取验证码" forState:UIControlStateNormal];

                    });

                }

                else

                {

                    int seconds = timeout % 60;

                    NSString *strTime = [NSString stringWithFormat:@"%.0d", seconds];

                    dispatch_async(dispatch_get_main_queue(), ^{

                        

                        //回主线程 更新UI   设置界面的按钮显示 根据自己需求设置

                        weakSelf.getCodeBtn.enabled = NO;

                        weakSelf.getCodeBtn.titleLabel.textAlignment = NSTextAlignmentCenter;

                        

                        if (strTime.length == 0) {

                            [self.getCodeBtn setTitle:[NSString stringWithFormat:@"验证码(60)"] forState:UIControlStateDisabled];

                        }

                        else

                        {

                            [self.getCodeBtn setTitle:[NSString stringWithFormat:@"验证码(%@)",strTime] forState:UIControlStateDisabled];

                        }

                    });

                    

                    timeout--;

                }

            });

             //开始执行dispatch源

            dispatch_resume(_timer);

            

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值