iOS中简单易懂秒杀倒计时/倒计时

@interface ViewController ()
{
      dispatch_source_t _timer;
}
@end
 
@implementation ViewController
/**
  *  获取当天的年月日的字符串
  *  这里测试用
  *  @return 格式为年-月-日
  */
-(NSString *)getyyyymmdd{
     NSDate *now = [NSDate date];
     NSDateFormatter *formatDay = [[NSDateFormatter alloc] init];
     formatDay.dateFormat = @ "yyyy-MM-dd" ;
     NSString *dayStr = [formatDay stringFromDate:now];
     
     return dayStr;
     
}
- ( void )viewDidLoad {
     [ super viewDidLoad];
     NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
     [dateFormatter setDateFormat:@ "yyyy-MM-dd" ];
     
     NSDate *endDate = [dateFormatter dateFromString:[self getyyyymmdd]];
     NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + 24 * 3600 )];
     NSDate *startDate = [NSDate date];
     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);
         }
     }
 
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值