没有合适的资源?快使用搜索试试~ 我知道了~
首页自定义倒计时工具:方便快捷的实现与应用
自定义倒计时工具:方便快捷的实现与应用
需积分: 1 1 下载量 51 浏览量
更新于2024-09-09
收藏 2KB TXT 举报
本文档主要介绍了在iOS平台上使用自定义倒计时功能的方法。首先,作者提到一个名为`timeout`的变量,其值为60秒,这是倒计时的总时长。通过`dispatch_get_global_queue`函数创建了一个全局队列`queue`,用于调度定时任务。接着,通过`dispatch_source_create`函数创建了一个定时源`_timer`,类型为`DISPATCH_SOURCE_TYPE_TIMER`,它将在每秒执行一次回调。 在事件处理程序中,当`timeout`值小于或等于0时,倒计时结束。此时,会调用`dispatch_source_cancel`来停止定时器,并在主线程上更新UI,比如将按钮标题改为“发送验证码”,并设置按钮可交互。如果`timeout`还有剩余时间(即60秒),则显示“重新发送(剩余秒数)”;否则,计算剩余的秒数`seconds`,并保留两位小数后显示在界面上。 该代码片段展示了如何在iOS应用中利用GCD(Grand Central Dispatch,全局并发队列)实现一个简单的倒计时功能,并与UI交互。这是一项常见的需求,例如在用户验证操作时,为了防止频繁请求,提供一段倒计时来限制操作频率。掌握这个技术有助于开发者更好地控制和管理应用程序中的时间逻辑。
资源详情
资源推荐
__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_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(), ^{
//设置界面的按钮显示 根据自己需求设置
[l_timeButton setTitle:@"发送验证码" forState:UIControlStateNormal];
[l_timeButton addTarget:self action:@selector(RepeatStartTime) forControlEvents:UIControlEventTouchUpInside];
l_timeButton.userInteractionEnabled = YES;
});
}else{
if (timeout==60)
{
NSString * strTime = [NSString stringWithFormat:@"%d",timeout];
[l_timeButton setTitle:[NSString stringWithFormat:@"重新发送(%@)",strTime] forState:UIControlStateNormal];
}
else{
// int minutes = timeout / 60;
seconds = timeout % 60;
NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
NSLog(@"____%@",strTime);
[l_timeButton setTitle:[NSString stringWithFormat:@"重新发送(%@)",strTime] forState:UIControlStateNormal];
l_timeButton.userInteractionEnabled = NO;
});
}
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(), ^{
//设置界面的按钮显示 根据自己需求设置
[l_timeButton setTitle:@"发送验证码" forState:UIControlStateNormal];
[l_timeButton addTarget:self action:@selector(RepeatStartTime) forControlEvents:UIControlEventTouchUpInside];
l_timeButton.userInteractionEnabled = YES;
});
}else{
if (timeout==60)
{
NSString * strTime = [NSString stringWithFormat:@"%d",timeout];
[l_timeButton setTitle:[NSString stringWithFormat:@"重新发送(%@)",strTime] forState:UIControlStateNormal];
}
else{
// int minutes = timeout / 60;
seconds = timeout % 60;
NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
NSLog(@"____%@",strTime);
[l_timeButton setTitle:[NSString stringWithFormat:@"重新发送(%@)",strTime] forState:UIControlStateNormal];
l_timeButton.userInteractionEnabled = NO;
});
}
下载后可阅读完整内容,剩余1页未读,立即下载
JamesNo1
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功