当前位置 主页 > 网站技术 > 代码类 >

    iOS实现秒杀活动倒计时

    栏目:代码类 时间:2019-12-11 21:08

    IOS关于大型网站抢购、距活动结束,剩余时间倒计时的实现代码,代码比较简单,大家根据需求适当的添加修改删除代码

    1.定义4个 Label 来接收倒计时:

    @property (weak, nonatomic) IBOutlet UILabel *dayLabel;
    @property (weak, nonatomic) IBOutlet UILabel *hourLabel;
    @property (weak, nonatomic) IBOutlet UILabel *minuteLabel;
    @property (weak, nonatomic) IBOutlet UILabel *secondLabel;

    2.在实现文件中实现方法:

    //时间戳转换为日期格式(毫秒的时间戳)
    - (NSString *)timeWithTimeIntervalString:(NSString *)timeString
    {
      // 格式化时间
      NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
      formatter.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"];
      [formatter setDateStyle:NSDateFormatterMediumStyle];
      [formatter setTimeStyle:NSDateFormatterShortStyle];
      [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    
      // 毫秒值转化为秒
      NSDate* date = [NSDate dateWithTimeIntervalSince1970:[timeString doubleValue]/ 1000.0];
      NSString* dateString = [formatter stringFromDate:date];
      NSLog(@"时间 === %@",dateString);
      return dateString;
    }
    -(void)downSecondHandle:(NSString *)aTimeString{
    
      NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
      [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    
    
      NSDate *endDate = [dateFormatter dateFromString:[self timeWithTimeIntervalString:aTimeString]]; //结束时间
      NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate])];
      NSDate *startDate = [NSDate date];
        NSString* dateString = [dateFormatter stringFromDate:startDate];
      NSLog(@"现在的时间 === %@",dateString);
      NSTimeInterval timeInterval =[endDate_tomorrow timeIntervalSinceDate:startDate];
    
      if (_timer==nil) {
        __block int timeout = timeInterval; //倒计时时间
    
        if (timeout!=0) {
          dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
          _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
          dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
          dispatch_source_set_event_handler(_timer, ^{
            if(timeout<=0){ //倒计时结束,关闭
              dispatch_source_cancel(_timer);
              _timer = nil;
              dispatch_async(dispatch_get_main_queue(), ^{
                self.dayLabel.text = @"";
                self.hourLabel.text = @"00";
                self.minuteLabel.text = @"00";
                self.secondLabel.text = @"00";
              });
            }else{
              int days = (int)(timeout/(3600*24));
              if (days==0) {
                self.dayLabel.text = @"";
              }
              int hours = (int)((timeout-days*24*3600)/3600);
              int minute = (int)(timeout-days*24*3600-hours*3600)/60;
              int second = timeout-days*24*3600-hours*3600-minute*60;
              dispatch_async(dispatch_get_main_queue(), ^{
                if (days==0) {
                  self.dayLabel.text = @"0天";
                }else{
                  self.dayLabel.text = [NSString stringWithFormat:@"%d天",days];
                }
                if (hours<10) {
                  self.hourLabel.text = [NSString stringWithFormat:@"0%d",hours];
                }else{
                  self.hourLabel.text = [NSString stringWithFormat:@"%d",hours];
                }
                if (minute<10) {
                  self.minuteLabel.text = [NSString stringWithFormat:@"0%d",minute];
                }else{
                  self.minuteLabel.text = [NSString stringWithFormat:@"%d",minute];
                }
                if (second<10) {
                  self.secondLabel.text = [NSString stringWithFormat:@"0%d",second];
                }else{
                  self.secondLabel.text = [NSString stringWithFormat:@"%d",second];
                }
    
              });
              timeout--;
            }
          });
          dispatch_resume(_timer);
        }
      }
    
    
    }