这段时间写公司的一个外包项目,需要用到倒计时:需要显示时分秒,通过在网上搜集资料,找到了2中方法,我把这两种方法结合起来,可以很好的满足这个需求:

1、创建一个类继承自UIlabel,用来展示时分秒的

.h文件

  1. #import <UIKit/UIKit.h>
  2.  
  3. @interface TimerLab : UILabel
  4.  
  5. @property (nonatomic,assign)NSInteger second;
  6. @property (nonatomic,assign)NSInteger minute;
  7. @property (nonatomic,assign)NSInteger hour;
  8.  
  9. @end

.m文件

  1. #import "TimerLab.h"
  2. @interface TimerLab ()
  3. @property (nonatomic, strong)NSTimer *timer;
  4. @end
  5.  
  6. @implementation TimerLab
  7.  
  8. - (id)initWithFrame:(CGRect)frame{
  9. self = [super initWithFrame:frame];
  10. if (self) {
  11. self.textAlignment = NSTextAlignmentCenter;
  12. self.timer = [NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timeHeadle) userInfo:nil repeats:YES];
  13. }
  14. return self;
  15. }
  16.  
  17. - (void)timeHeadle{
  18.  
  19. self.second--;
  20. if (self.second==-) {
  21. self.second=;
  22. self.minute--;
  23. if (self.minute==-) {
  24. self.minute=;
  25. self.hour--;
  26. }
  27. }
  28.  
  29. if (self.hour < || self.minute < || self.second < ) {
  30. self.text = @"倒计时结束需要显示的字样";
  31. [self.timer invalidate];
  32. self.timer = nil;
  33. }else
  34. {
  35. self.text = [NSString stringWithFormat:@"%ld:%ld:%ld",(long)self.hour,(long)self.minute,(long)self.second];
  36.  
  37. }
  38. if (self.second== && self.minute== && self.hour==) {
  39. [self.timer invalidate];
  40. self.timer = nil;
  41. }
  42. }
  43.  
  44. @end

2、我是在cell里面显示的,(这里注意,不能用xib或者SB拖得,那样不行,必须得是手写,具体是因为使用拖得空间,没有走alloc很重,所以在控制器上显示会有问题)

(1)在项目里面具体实现下面这2个方法

  1. #pragma mark 每个cell倒计时的方法/*-------------------------------------------------------*/
  2. - (NSString*)remainingTimeMethodAction:(long long)endTime
  3. {
  4. //得到当前时间
  5. NSDate *nowData = [NSDate date];
  6. NSLog(@"---当前时间:%@",nowData);
  7. NSDate *endData=[NSDate dateWithTimeIntervalSince1970:endTime];
  8. NSLog(@"----结束时间%@",endData);
  9. NSCalendar* chineseClendar = [ [ NSCalendar alloc ] initWithCalendarIdentifier:NSGregorianCalendar ];
  10. NSUInteger unitFlags =
  11. NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;
  12. NSDateComponents *cps = [chineseClendar components:unitFlags fromDate:nowData toDate: endData options:];
  13. NSInteger Hour = [cps hour];
  14. NSInteger Min = [cps minute];
  15. NSInteger Sec = [cps second];
  16. NSInteger Day = [cps day];
  17. NSInteger Mon = [cps month];
  18. NSInteger Year = [cps year];
  19. NSLog( @" From Now to %@, diff: Years: %ld Months: %ld, Days; %ld, Hours: %ld, Mins:%ld, sec:.%ld",
  20. [nowData description], (long)Year, (long)Mon, (long)Day, (long)Hour, (long)Min,(long)Sec );
  21. // NSString *countdown = [NSString stringWithFormat:@"还剩: %zi天 %zi小时 %zi分钟 %zi秒 ", Day,Hour, Min, Sec];
  22. NSString *countdown = [NSString stringWithFormat:@"%zi:%zi:%zi",Hour, Min, Sec];
  23. NSLog(@"0000%@",countdown);
  24. if (Sec< && Min< && Hour<) {
  25. countdown=[NSString stringWithFormat:@"进行中"];
  26. }
  27. return countdown;
  28. }
  29.  
  30. //时间转化时间戳
  31. -(NSString *)checksting:(NSString *)datas
  32. {
  33. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  34. [formatter setDateStyle:NSDateFormatterMediumStyle];
  35. [formatter setTimeStyle:NSDateFormatterShortStyle];
  36. [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
  37.  
  38. NSDate *date = [formatter dateFromString:datas];
  39. NSString *timerStrs = [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]];
  40. return timerStrs;
  41. }
  42.  
  43. #pragma mark/*------------------------------------------------------------------------- */

3,cell里面的具体赋值操作

  1. //1、 获得到期时间串
  2. NSString *timSts = [NSString stringWithFormat:@"%@",model.time2];
  3.  
  4. //2、 转化成到时时间戳,并传进对比方法里面
  5. NSString *timerStrs = [NSString stringWithFormat:@"%@",[self remainingTimeMethodAction:[[self checksting:timSts] longLongValue]]];
  6.  
  7. //3、 分割字符串,取出时分秒
  8. NSArray *ary = [timerStrs componentsSeparatedByString:@":"];
  9. NSLog(@"ary is %@",timerStrs);
  10.  
  11. if (ary.count == ) {
  12. cell.YB_dqTimeLab.hour = [[ary objectAtIndex:] integerValue];
  13. cell.YB_dqTimeLab.minute = [[ary objectAtIndex:] integerValue];
  14. cell.YB_dqTimeLab.second = [[ary objectAtIndex:] integerValue];
  15. }else if(ary.count == )
  16. {
  17. cell.YB_dqTimeLab.hour = ;
  18. cell.YB_dqTimeLab.minute = ;
  19. cell.YB_dqTimeLab.second = ;
  20. }

我是用了别人写好的倒计时显示用的自定义的label,然后使用时间比对的方法,算出时间差,然后进行倒计时的操作!如有理解不到的地方

还希望大家指正!

iOS开发之--实现倒计时显示时分秒的更多相关文章

  1. ios开发之--把秒转换为天时分秒

    把秒转换成时分秒: - (NSString *)timeFormatted:(int)totalSeconds { ; ) % ; ; return [NSString stringWithForma ...

  2. iOS开发——高级特性&Runtime运行时特性详解

    Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...

  3. iOS开发-设置在使用NavigateController时View的顶部位置

      最近我在开发中遇到了一个问题,在使用NavigationController时内部的ViewController的View总是与屏幕顶部对齐,而我们有时候不需要这种效果: 在开发过程中,我们可能会 ...

  4. C# DateTimePicker控件如何精确设置显示时分秒

    项目中需要使用DateTimePicker空间选定当前的时间,但是这个空间默认显示到天,如何能让它显示具体的小时和分钟呢? 我们看到有一个Format属性,Format令我们想到格式化,有这几种格式 ...

  5. iOS开发-自己定义后台显示图片(iOS7-Background Fetch的应用)

    之前在用电池医生的时候, 发现它有这样一个功能:当应用进入后台的时候, 会显示另外一张图片覆盖App Switcher显示的界面. 效果例如以下: 变成----> 而这种一个功能, 对于保护用户 ...

  6. datetimepicker只显示日期,不显示时分秒

    HTML代码<div class="input-group date form_datetime form-date" data-link-field="dtp_i ...

  7. iOS开发 - 在SwiftUI中显示模态视图

    在SwiftUI中显示模态视图 简介 这里教大家如何弹出一个简单的模态视图.分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B.我们要做的是在A视图中点击按钮 ...

  8. iOS开发——底层OC篇&运行时常用

    运行时常用 什么是Runtime(前面的文章已经说的很清楚了,这里就简单的介绍一下) 我们写的代码在程序运行过程中都会被转化成runtime的C代码执行,例如[target doSomething]; ...

  9. iOS开发cell--滑动手势显示按钮

    // 主要代码 #warning iOS8 - #pragma mark 在滑动手势删除某一行的时候,显示出更多的按钮 - (NSArray *)tableView:(UITableView *)ta ...

随机推荐

  1. 【转帖】Service Discovery: 6 questions to 4 experts

    https://highops.com/insights/service-discovery-6-questions-to-4-experts/ What’s Service Discovery? I ...

  2. LibRec:一个实现推荐系统的Java库包

    LibRec是一个用于实现推系统 RS 的Java库包,实现推荐系统的两个经典问题: rating prediction(评分排行预测) 和 item ranking (项目排行),其内置了经典的机器 ...

  3. bash的输出多行和vim的全部选择

    使用cat命令加输出符>来在bash脚本里面输出多行文本是最直观的做法. cat >out.file <<EOF start a line ... ... a line aga ...

  4. Launcher代码大全

    蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID VPN:prefs:root=General&path=Network/VPN Wi-Fi:prefs:root ...

  5. jdom 读取

    读取XML文档 读取文档,首先需要一个xml的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作. 主要使用的函数: SAXBuilder.build("xxx.x ...

  6. httpclient4.5 的一些细节

    本文转自:http://mercymessi.iteye.com/blog/2250161 httpclient是Apache下的一个用于执行http网络访问的一个工具包. 大致流程:新建一个http ...

  7. Android开发艺术探索读书笔记——进程间通信

    1. 多进程使用场景 1) 应用某些模块由于特殊需求须要执行在单独进程中. 如消息推送,使消息推送进程与应用进程能单独存活,消息推送进程不会由于应用程序进程crash而受影响. 2) 为加大一个应用可 ...

  8. CSS——你所不知的 CSS ::before 和 ::after 伪元素用法(转)

    你所不知的 CSS ::before 和 ::after 伪元素用法 CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前 ...

  9. hive表分区的修复

    hive从低版本升级到高版本或者做hadoop的集群数据迁移时,需要重新创建表和表分区,由于使用的是动态分区,所以需要重新刷新分区表字段,否则无法查看数据. 在hive中执行中以下命令即可自动更新元数 ...

  10. [转]解决Cannot change version of project facet Dynamic web module to 2.5

    我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...