文档章节

小demo - 显示倒计时Label

秦无炎
 秦无炎
发布于 2016/10/25 10:19
字数 398
阅读 95
收藏 1

小demo - 显示倒计时Label

简单的倒计时Label封装,最高显示到天数,年月未设置,用的太少.

  • 下图为演示

声明文件

 
  1. #import <UIKit/UIKit.h>
  2.  
  3. @interface BYCountdownLabel : UILabel
  4.  
  5. /**根据目标时间计算跟服务器的差值*/
  6. - (void)setupCountDownWithTargetTime:(NSDate *)targetTime;
  7.  
  8. @end

实现文件

 
  1. #import "BYCountdownLabel.h"
  2.  
  3. @interface BYCountdownLabel ()
  4.  
  5. /**时间定时器,用weak可以在定时器销毁之后指针自动置为nil*/
  6. @property (nonatomic, weak) NSTimer *timer;
  7. /**天数*/
  8. @property (nonatomic, assign) NSUInteger day;
  9. /**小时数*/
  10. @property (nonatomic, assign) NSUInteger hour;
  11. /**分钟数*/
  12. @property (nonatomic, assign) NSUInteger minute;
  13. /**秒数*/
  14. @property (nonatomic, assign) NSUInteger second;
  15.  
  16. @end
  17. @implementation BYCountdownLabel
  18.  
  19. - (void)setupCountDownWithTargetTime:(NSDate *)targetTime {
  20.  
  21. // 计算目标时间和当前服务器时间的时间差
  22. NSTimeInterval interval = [targetTime timeIntervalSinceDate:[NSDate date]];
  23. // 根据时间差的秒数计算天,小时,分钟,秒(暂时不考虑月和年,月和年的倒计时用的很少)
  24. [self calculateTime:(NSInteger)interval];
  25.  
  26. }
  27.  
  28. /**计算时间方法*/
  29. - (void)calculateTime:(NSInteger)interval {
  30.  
  31. // 天
  32. self.day = interval/86400; // 一天 == 86400 == 24*60*60秒
  33. // 小时
  34. self.hour = interval%86400/3600;
  35. // 分钟
  36. self.minute = interval%3600/60;
  37. // 秒
  38. self.second = interval%60;
  39. // 赋值到label上
  40. self.text = [NSString stringWithFormat:@"%02zd天%02zd:%02zd:%02zd",
  41. self.day, self.hour, self.minute, self.second];
  42. // 一秒钟后调用减一秒方法
  43. self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeDecrease) userInfo:nil repeats:YES];
  44.  
  45. }
  46.  
  47. /**时间减一秒方法*/
  48. - (void)timeDecrease {
  49.  
  50. // 减一秒
  51. self.second--;
  52. // 判断秒数
  53. if (self.second == -1) {
  54. self.second = 59;
  55. // 分钟减一
  56. self.minute--;
  57. }
  58. // 判断分钟数
  59. if (self.minute == -1) {
  60. self.minute = 59;
  61. // 小时减1
  62. self.hour--;
  63. }
  64. // 判断小时数
  65. if (self.hour == -1) {
  66. self.hour = 23;
  67. // 天数减1
  68. self.day--;
  69. }
  70. // 判断是否没时间了
  71. if (self.day == 0 &&
  72. self.hour == 0 &&
  73. self.minute == 0 &&
  74. self.second == 0) {
  75. [self.timer invalidate];
  76. }
  77. // 赋值
  78. self.text = [NSString stringWithFormat:@"%02zd天%02zd:%02zd:%02zd",
  79. self.day, self.hour, self.minute, self.second];
  80.  
  81. }
  82.  
  83. @end

 

 

原文:http://bbs.520it.com/forum.php?mod=viewthread&tid=2591&pid=27758&page=1&extra=#pid27758

本文转载自:

秦无炎
粉丝 4
博文 128
码字总数 6363
作品 0
朝阳
程序员
私信 提问
商品倒计时 for Swift

因公司项目添加商品倒计时需求,故针对商品倒计时模块做了个Demo,也是对自己的总结; 经过370041534群里的朋友提醒,既然是cell上有多个倒计时,可使用一个定时器控制cell上所有的倒计时,在...

程序H
2018/06/05
0
0
运动类APP321倒计时动画

项目是运动类,有一个321倒计时进入运动界面的功能,实现用了简单的基础动画CABasicAnimation,大致效果如下 gif5新文件.gif 下面我们看一下实现部分 创建了一个CABasicAnimation 使用了其中...

不会开发的尬先生
2018/01/24
0
0
iOS-常用的自定义控件

前言 项目中比较可能会用到的自定义控件,也会去参考别人的第三方,解读他们解决问题的思路并加上自己的逻辑,记录下来方便以后阅读; (一)图文验证码; demo展示的是简单的图文验证(没有...

麦兜卖鱼丸
2016/10/18
42
0
20 款绝佳的 jQuery 倒计时脚本和插件

Circular Countdown jQuery Plugin - MORE INFO / DEMO Coconut – Jquery Countdown Plugin - MORE INFO / DEMO 包含四种不同尺寸的圆。 Dynamic Countdown with Counter – MORE INFO / DE......

oschina
2013/08/29
18.9K
7
用SYSLINUX做启动U盘、光盘

用SYSLINUX做启动U盘、光盘 标签:syslinux 启动光盘 光盘文件结构如下:[附件中有相关文件,因为不能上传大文件所以把IMG和ISO文件都删除了] 根─boot │ pe.iso │ ├─imgs │ DGDOS.IMG │...

rshare
2017/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部