欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS中实现简单易懂秒杀倒计时/倒计时代码

程序员文章站 2024-02-15 20:18:10
示例代码简单易懂: #import @interface viewcontroller : uivie...

示例代码简单易懂:

iOS中实现简单易懂秒杀倒计时/倒计时代码

#import
<uikit uikit.h="">
@interface
viewcontroller : uiviewcontroller
@property
(weak, nonatomic) iboutlet uilabel *daylabel;
@property
(weak, nonatomic) iboutlet uilabel *hourlabel;
@property
(weak, nonatomic) iboutlet uilabel *minutelabel;
@property
(weak, nonatomic) iboutlet uilabel *secondlabel;
@end</uikit>
#import
"viewcontroller.h"
@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);
  }
 }
}
<span
 style="font-family:
 arial, verdana, sans-serif;">效果:</span>

iOS中实现简单易懂秒杀倒计时/倒计时代码

以上所述是小编给大家介绍的ios中实现简单易懂秒杀倒计时/倒计时代码,希望对大家有所帮助