• NStimer 倒计时


    1、初始化

    + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

    + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

    注:不用scheduled方式初始化的,需要手动addTimer:forMode: 将timer添加到一个runloop中。

      而scheduled的初始化方法将以默认mode直接添加到当前的runloop中.

    scheduledTimerWithTimeInterval:(NSTimeInterval)seconds  

    预订一个Timer,设置一个时间间隔。

    表示输入一个时间间隔对象,以秒为单位,一个>0的浮点类型的值,如果该值<0,系统会默认为0.1

     target:(id)aTarget

    表示发送的对象,如self

     selector:(SEL)aSelector

    方法选择器,在时间间隔内,选择调用一个实例方法

    userInfo:(id)userInfo

    此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器。

    repeats:(BOOL)yesOrNo

    当YES时,定时器会不断循环直至失效或被释放,当NO时,定时器会循环发送一次就失效。

    当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。

    用NSTimer实现倒计时

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
      
    //
    - (void)timerFireMethod:(NSTimer *)theTimer
    {
        BOOL timeStart = YES;
        NSCalendar *cal = [NSCalendar currentCalendar];//定义一个NSCalendar对象
        NSDateComponents *endTime = [[NSDateComponents alloc] init];    //初始化目标时间...
        NSDate *today = [NSDate date];    //得到当前时间
          
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSDate *dateString = [dateFormatter dateFromString:todate];
        NSString *overdate = [dateFormatter stringFromDate:dateString];
    //    NSLog(@"overdate=%@",overdate);
        static int year;
        static int month;
        static int day;
        static int hour;
        static int minute;
        static int second;
        if(timeStart) {//从NSDate中取出年月日,时分秒,但是只能取一次
            year = [[overdate substringWithRange:NSMakeRange(0, 4)] intValue];
            month = [[overdate substringWithRange:NSMakeRange(5, 2)] intValue];
            day = [[overdate substringWithRange:NSMakeRange(8, 2)] intValue];
            hour = [[overdate substringWithRange:NSMakeRange(11, 2)] intValue];
            minute = [[overdate substringWithRange:NSMakeRange(14, 2)] intValue];
            second = [[overdate substringWithRange:NSMakeRange(17, 2)] intValue];
            timeStart= NO;
        }
          
        [endTime setYear:year];
        [endTime setMonth:month];
        [endTime setDay:day];
        [endTime setHour:hour];
        [endTime setMinute:minute];
        [endTime setSecond:second];
        NSDate *overTime = [cal dateFromComponents:endTime]; //把目标时间装载入date
        //用来得到具体的时差,是为了统一成北京时间
        unsigned int unitFlags = NSYearCalendarUnit| NSMonthCalendarUnit| NSDayCalendarUnit| NSHourCalendarUnit| NSMinuteCalendarUnit| NSSecondCalendarUnit;
        NSDateComponents *d = [cal components:unitFlags fromDate:today toDate:overTime options:0];
        NSString *t = [NSString stringWithFormat:@"%d", [d day]];
        NSString *h = [NSString stringWithFormat:@"%d", [d hour]];
        NSString *fen = [NSString stringWithFormat:@"%d", [d minute]];
        if([d minute] < 10) {
            fen = [NSString stringWithFormat:@"0%d",[d minute]];
        }
        NSString *miao = [NSString stringWithFormat:@"%d", [d second]];
        if([d second] < 10) {
            miao = [NSString stringWithFormat:@"0%d",[d second]];
        }
    //    NSLog(@"===%@天 %@:%@:%@",t,h,fen,miao);
        [_longtime setText:[NSString stringWithFormat:@"%@天 %@:%@:%@",t,h,fen,miao]];
        if([d second] > 0) {
            //计时尚未结束,do_something
    //        [_longtime setText:[NSString stringWithFormat:@"%@:%@:%@",d,fen,miao]];
        } else if([d second] == 0) {
            //计时结束 do_something
              
        } else{
    //计时器失效
            [theTimer invalidate];
        }
          
    }
  • 相关阅读:
    java窗口按钮位置设置
    使用java语言编写窗口按钮
    添加无参的构造方法
    冒泡排序
    多态
    首页列表显示全部问答,完成问答详情页布局。
    制作首页的显示列表。
    发布功能完成。
    登录之后更新导航
    完成登录功能,用session记住用户名
  • 原文地址:https://www.cnblogs.com/tianlianghong/p/5269933.html
Copyright © 2020-2023  润新知