iOS开发之--实现倒计时显示时分秒
这段时间写公司的一个外包项目,需要用到倒计时:需要显示时分秒,通过在网上搜集资料,找到了2中方法,我把这两种方法结合起来,可以很好的满足这个需求:
1、创建一个类继承自UIlabel,用来展示时分秒的
.h文件
#import <UIKit/UIKit.h>
@interface TimerLab : UILabel
@property (nonatomic,assign)NSInteger second;
@property (nonatomic,assign)NSInteger minute;
@property (nonatomic,assign)NSInteger hour;
@end
.m文件
#import "TimerLab.h" @interface TimerLab () @property (nonatomic, strong)NSTimer *timer; @end @implementation TimerLab - (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self.textAlignment = NSTextAlignmentCenter; self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeHeadle) userInfo:nil repeats:YES]; } return self; } - (void)timeHeadle{ self.second--; if (self.second==-1) { self.second=59; self.minute--; if (self.minute==-1) { self.minute=59; self.hour--; } } if (self.hour < 0 || self.minute < 0 || self.second < 0) { self.text = @"倒计时结束需要显示的字样"; [self.timer invalidate]; self.timer = nil; }else { self.text = [NSString stringWithFormat:@"%ld:%ld:%ld",(long)self.hour,(long)self.minute,(long)self.second]; } if (self.second==0 && self.minute==0 && self.hour==0) { [self.timer invalidate]; self.timer = nil; } } @end
2、我是在cell里面显示的,(这里注意,不能用xib或者SB拖得,那样不行,必须得是手写,具体是因为使用拖得空间,没有走alloc很重,所以在控制器上显示会有问题)
(1)在项目里面具体实现下面这2个方法
#pragma mark 每个cell倒计时的方法/*-------------------------------------------------------*/ - (NSString*)remainingTimeMethodAction:(long long)endTime { //得到当前时间 NSDate *nowData = [NSDate date]; NSLog(@"---当前时间:%@",nowData); NSDate *endData=[NSDate dateWithTimeIntervalSince1970:endTime]; NSLog(@"----结束时间%@",endData); NSCalendar* chineseClendar = [ [ NSCalendar alloc ] initWithCalendarIdentifier:NSGregorianCalendar ]; NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit; NSDateComponents *cps = [chineseClendar components:unitFlags fromDate:nowData toDate: endData options:0]; NSInteger Hour = [cps hour]; NSInteger Min = [cps minute]; NSInteger Sec = [cps second]; NSInteger Day = [cps day]; NSInteger Mon = [cps month]; NSInteger Year = [cps year]; NSLog( @" From Now to %@, diff: Years: %ld Months: %ld, Days; %ld, Hours: %ld, Mins:%ld, sec:.%ld", [nowData description], (long)Year, (long)Mon, (long)Day, (long)Hour, (long)Min,(long)Sec ); // NSString *countdown = [NSString stringWithFormat:@"还剩: %zi天 %zi小时 %zi分钟 %zi秒 ", Day,Hour, Min, Sec]; NSString *countdown = [NSString stringWithFormat:@"%zi:%zi:%zi",Hour, Min, Sec]; NSLog(@"0000%@",countdown); if (Sec<0 && Min<0 && Hour<0) { countdown=[NSString stringWithFormat:@"进行中"]; } return countdown; } //时间转化时间戳 -(NSString *)checksting:(NSString *)datas { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterMediumStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle]; [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; NSDate *date = [formatter dateFromString:datas]; NSString *timerStrs = [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]]; return timerStrs; } #pragma mark/*------------------------------------------------------------------------- */
3,cell里面的具体赋值操作
//1、 获得到期时间串 NSString *timSts = [NSString stringWithFormat:@"%@",model.time2]; //2、 转化成到时时间戳,并传进对比方法里面 NSString *timerStrs = [NSString stringWithFormat:@"%@",[self remainingTimeMethodAction:[[self checksting:timSts] longLongValue]]]; //3、 分割字符串,取出时分秒 NSArray *ary = [timerStrs componentsSeparatedByString:@":"]; NSLog(@"ary is %@",timerStrs); if (ary.count == 3) { cell.YB_dqTimeLab.hour = [[ary objectAtIndex:0] integerValue]; cell.YB_dqTimeLab.minute = [[ary objectAtIndex:1] integerValue]; cell.YB_dqTimeLab.second = [[ary objectAtIndex:2] integerValue]; }else if(ary.count == 1) { cell.YB_dqTimeLab.hour = 0; cell.YB_dqTimeLab.minute = 0; cell.YB_dqTimeLab.second = 0; }
我是用了别人写好的倒计时显示用的自定义的label,然后使用时间比对的方法,算出时间差,然后进行倒计时的操作!如有理解不到的地方
还希望大家指正!
本文来自博客园,作者:稻草人11223,转载请注明原文链接:https://www.cnblogs.com/hero11223/p/6042119.html