美文网首页iOS程序员O~2
iOS开发 | 抢购倒计时

iOS开发 | 抢购倒计时

作者: _冇毒 | 来源:发表于2017-06-15 15:52 被阅读217次

倒计时是现在项目中很常用到的一个模块, 尤其是在跟电商项目挂钩的项目中.
之前在使用NSTimer时发现

如果NSTimer执行过程中由于某种原因被延迟,会略过本该在延迟期间需要执行的方法。

解决方案是使用GCD定时器。

/**
*  倒计时工具
*
*  @param time  倒计时时间
*  @param blockYes 倒计时结束 设置UI
*  @param blockNo  倒计时进行中 设置UI
*/
+ (void)verificationCode:(long long)time blockYes:(void(^)())blockYes blockNo:(void(^)(id time))blockNo
{
  __block long long timeout = time; //倒计时时间
  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_source_t _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);
      dispatch_async(dispatch_get_main_queue(), ^{
        //设置界面的按钮显示 根据自己需求设置
        blockYes();
      });
    }else{
      //            int minutes = timeout / 60;
      int seconds = timeout % 60;
      NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
      dispatch_async(dispatch_get_main_queue(), ^{
        //设置界面的按钮显示 根据自己需求设置
        blockNo(strTime);
      });
    timeout--;
    }
  });
  dispatch_resume(_timer);
}

这样写的话能够保证倒计时时间更准确.
既然是倒计时抢购, 光有倒计时是不够的. 还需要有剩余时间的显示, 你所得到的是秒数, 还需要把秒数转化为()天()时()分()秒.

- (void)getDetailTimeWithTimestamp:(NSInteger)timestamp
{
  NSInteger ms = timestamp;
  NSInteger ss = 1;
  NSInteger mi = ss * 60;
  NSInteger hh = mi * 60;
  NSInteger dd = hh * 24;
  // 剩余的
  NSInteger day = ms / dd;// 天
  NSInteger hour = (ms - day * dd) / hh;// 时
  NSInteger minute = (ms - day * dd - hour * hh) / mi;// 分
  NSInteger second = (ms - day * dd - hour * hh - minute * mi) / ss;// 秒
  NSLog(@"%zd日:%zd时:%zd分:%zd秒",day,hour,minute,second);
  self.limitTimeLabel.text = [NSString stringWithFormat:@"%zd天%zd:%zd:%zd",day,hour,minute,second];
}

这样, 一个倒计时抢购就完成了.

log.png

Log还是比较准的.

相关文章

  • iOS开发 | 抢购倒计时

    倒计时是现在项目中很常用到的一个模块, 尤其是在跟电商项目挂钩的项目中.之前在使用NSTimer时发现 如果NS...

  • 倒计时

    ios怎么在cell上添加倒计时 iOS中 简单易懂的秒杀倒计时/倒计时 iOS开发-三种倒计时的写法 iOS实现...

  • 关于商品抢购案例的分析

    在抢购时间外:距离抢购时间开始还有:抢购开始时间和当前时间做对比如果抢购时间>当前时间 那么倒计时秒为 今天的抢...

  • 前端技术前沿8

    实现倒计时(天数、时、分、秒) parseInt() 函数可解析一个字符串,并返回一个整数。 抢购倒计时功能 抢购...

  • iOS实现倒计时的三种方式

    iOS实现倒计时的三种方式 做iOS app开发的过程当中,经常会出现获取验证码等需求,这个时候一般会使用倒计时来...

  • iOS快速实现一个保存记录的倒计时按钮

    iOS开发中在登录、注册、找回密码等页面经常需要实现倒计时按钮,但是很多情况下用户点击倒计时按钮开始倒计时之后,再...

  • ios系统setInterval倒计时在页面挂起时暂停的问题

    在开发一个h5活动的倒计时功能中, 使用了setInterval, 遇到在ios系统中页面挂起时, 倒计时功能就暂...

  • (转)JS实现活动精确倒计时

    背景 前端页面倒计时功能在很多场景中会用到,如运营活动开始倒计时和活动结束倒计时,又如购物网站的秒杀倒计时,抢购倒...

  • React Native中秒杀倒计时实现

    RN项目中需要实现一个类似商品火爆倒计时抢购的功能.

  • 一个简单的倒计时小例子

    倒计时在秒杀或抢购活动中尤为常用,那今天我就带大家写一种最简单的倒计时。

网友评论

    本文标题:iOS开发 | 抢购倒计时

    本文链接:https://www.haomeiwen.com/subject/paquqxtx.html