定时器iOS

本文介绍了如何在iOS中使用GCD(Grand Central Dispatch)创建定时器,通过`dispatch_source_create`函数和`dispatch_source_set_timer`设置定时器,实现倒计时功能。在事件处理器中更新界面,当倒计时结束时关闭定时器并恢复按钮交互状态。

//    // 设置定时器


可以如下创建相应的dispatch source:

使用 dispatch_source_create 函数创建dispatch source

配置dispatch source:

为dispatch source设置一个事件处理器

对于定时器源,使用 dispatch_source_set_timer 函数设置定时器信息

dispatch_source_set_event_handler事件处理器




        __block int timeOut = 60;// 倒计时

        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

// dispatch source 定期产生通知

        // 计时器

        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(), ^{

                    

                        // 设置界面的按钮显示 根据自己需求设置

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

                        getCodeBtn.userInteractionEnabled = YES;

                        

                    

                    

                });

            }else{

                // 用总时间与一个大数求余数,获得秒数

                int seconds = timeOut % 600;

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

                dispatch_async(dispatch_get_main_queue(), ^{

                    

                        // 设置界面的显示 根据自己需求设置

                        [getCodeBtn setTitle:[NSString stringWithFormat:@"%@秒重新发送",strTime] forState:UIControlStateNormal];

                        getCodeBtn.backgroundColor = [UIColor lightGrayColor];

                        getCodeBtn.userInteractionEnabled = NO;

                    

                    

                });

                // 然后让时间开始递减

                timeOut --;

            }

        });

        // 启动

        dispatch_resume(_timer);


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值