// // 设置定时器
可以如下创建相应的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);
本文介绍了如何在iOS中使用GCD(Grand Central Dispatch)创建定时器,通过`dispatch_source_create`函数和`dispatch_source_set_timer`设置定时器,实现倒计时功能。在事件处理器中更新界面,当倒计时结束时关闭定时器并恢复按钮交互状态。
1187

被折叠的 条评论
为什么被折叠?



