zoukankan      html  css  js  c++  java
  • 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,然后使用时间比对的方法,算出时间差,然后进行倒计时的操作!如有理解不到的地方

    还希望大家指正!

  • 相关阅读:
    217. Contains Duplicate (leetcode)
    242. Valid Anagram(leetcode)
    JVM的逃逸分析
    有 a
    Maven 项目管理从未如此通畅
    Spring学习手札(四)谈谈Spring Bean的生命周期及作用域
    Spring学习手札(三)理解IoC 拯救不开心
    Spring学习手札(二)面向切面编程AOP
    Spring学习手札(一)
    Java提供了哪些IO方式?IO, BIO, NIO, AIO是什么?
  • 原文地址:https://www.cnblogs.com/hero11223/p/6042119.html
Copyright © 2011-2022 走看看