一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2017-03-29 编辑:简简单单 来源:一聚教程网

示例代码简单易懂:

 代码如下 复制代码

#import

@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

 代码如下 复制代码

#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);

  }

 }

}

 style="font-family:

 Arial, Verdana, sans-serif;">效果:

热门栏目