限时抢购,倒计时,定时器
2016-07-16 00:00
288 查看
摘要: 做商城,支付,一元夺宝类的APP 通常会遇见限时抢购问题,那么就由老司机带你来体验限时抢购。
@interface ViewController ()
{
dispatch_source_t _timer;
}
@property (nonatomic,strong)UILabel *hourLabel;
@property (nonatomic,strong)UILabel *minuteLabel;
@property (nonatomic,strong)UILabel *secondLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createTimeLabel];
// 后台传给你的时间参数(注意日期的格式)
[self CountdownWithTimeString:@"2016-7-16 12:25:00"];
}
- (void)createTimeLabel{
_hourLabel = [[UILabel alloc]initWithFrame:CGRectMake(150, 150, 50, 20)];
[self.view addSubview:_hourLabel];
_minuteLabel = [[UILabel alloc]initWithFrame:CGRectMake(200, 150, 50, 20)];
[self.view addSubview:_minuteLabel];
_secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(250, 150, 50, 20)];
[self.view addSubview:_secondLabel];
}
- (void)CountdownWithTimeString:(NSString *)string{
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *endDate = [dateFormatter dateFromString:string];
NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate])];
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));
int hours1 = (int)((timeout-days)/3600);
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 (hours1<10) {
self.hourLabel.text = [NSString stringWithFormat:@"0%d",hours1];
}else{
self.hourLabel.text = [NSString stringWithFormat:@"%d",hours1];
}
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);
}
}
}
@interface ViewController ()
{
dispatch_source_t _timer;
}
@property (nonatomic,strong)UILabel *hourLabel;
@property (nonatomic,strong)UILabel *minuteLabel;
@property (nonatomic,strong)UILabel *secondLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createTimeLabel];
// 后台传给你的时间参数(注意日期的格式)
[self CountdownWithTimeString:@"2016-7-16 12:25:00"];
}
- (void)createTimeLabel{
_hourLabel = [[UILabel alloc]initWithFrame:CGRectMake(150, 150, 50, 20)];
[self.view addSubview:_hourLabel];
_minuteLabel = [[UILabel alloc]initWithFrame:CGRectMake(200, 150, 50, 20)];
[self.view addSubview:_minuteLabel];
_secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(250, 150, 50, 20)];
[self.view addSubview:_secondLabel];
}
- (void)CountdownWithTimeString:(NSString *)string{
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *endDate = [dateFormatter dateFromString:string];
NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate])];
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));
int hours1 = (int)((timeout-days)/3600);
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 (hours1<10) {
self.hourLabel.text = [NSString stringWithFormat:@"0%d",hours1];
}else{
self.hourLabel.text = [NSString stringWithFormat:@"%d",hours1];
}
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);
}
}
}
相关文章推荐
- Delphi实现毫秒级别的倒计时实例代码
- javascript 宝宝出生倒计时实现代码
- android倒计时控件示例
- C#基于TimeSpan实现倒计时效果的方法
- javascript电商网站抢购倒计时效果实现
- js简单倒计时实现代码
- js实现发送验证码后的倒计时功能
- 设置下载不需要倒计时cookie(倒计时代码)
- 基于Javascript实现倒计时功能
- 基于JavaScript实现网页倒计时自动跳转代码
- 一个不错的js html页面倒计时可精确到秒
- jQuery团购倒计时特效实现方法
- jQuery实现倒计时按钮功能代码分享
- jquery制做精致的倒计时特效
- jQuery基于扩展简单实现倒计时功能的方法
- jquery实现倒计时功能
- 利用jQuery实现漂亮的圆形进度条倒计时插件
- jquery实现可关闭的倒计时广告特效代码
- jQuery实现简单倒计时功能的方法
- JQuery实现的按钮倒计时效果