您的位置:首页 > 移动开发 > IOS开发

iOS秒杀倒计时

2017-04-22 17:02 302 查看
秒杀倒计时

#import "ViewController.h"

#define SCREEN_WIDTH [[UIScreen mainScreen]bounds].size.width

#define SCREEN_HEIGHT  [[UIScreen mainScreen]bounds].size.height

@interface
ViewController (){

    dispatch_source_t _timer;

}

@property (nonatomic,strong)UIView
*ddView;

@property (nonatomic,strong)UILabel
*dayLabel;//剩余天数

@property (nonatomic,strong)UILabel
*hourLabel;//剩余小时

@property (nonatomic,strong)UILabel
*minuteLabel;//剩余分钟

@property (nonatomic,strong)UILabel
*secondLabel;//剩余秒

@end

//实现

@implementation ViewController

- (void)viewDidLoad {

    [super
viewDidLoad];

    

    [self
createUI];

    //日期格式

    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];//当前的date

    //距离明天凌晨的倒计时时间单位为s  25641.036014020443s

    NSTimeInterval timeInterVal = [endDate_Tomorrow
timeIntervalSinceDate:startDate];

    if (!_timer) {

        __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 =
@"";

                        self.minuteLabel.text =
@"";

                        self.secondLabel.text =
@"";

                    });

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

        }

    }

}

/*

 获取当天的年月日字符串

 */

- (NSString *)getYYYYMMDD{

    NSDate *now =[NSDate date];

    NSDateFormatter  *formatToday = [[NSDateFormatter alloc]init];

    formatToday.dateFormat = @"yyyy-MM-dd";

    NSString *dayStr =  [formatToday stringFromDate:now];

    return dayStr;

}

- (void)createUI{

    self.ddView = [[UIView alloc]initWithFrame:CGRectMake( SCREEN_WIDTH - 168, 100,160, 50)];

    [self.view addSubview:self.ddView];

    float cutViewW = 160 / 4.0;

    self.dayLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 10,
cutViewW, 30)];

    self.dayLabel.textAlignment = NSTextAlignmentRight;

    [self.ddView addSubview:self.dayLabel];

    self.hourLabel = [[UILabel alloc]initWithFrame:CGRectMake(cutViewW, 10,
cutViewW, 30)];

    self.hourLabel.textAlignment = NSTextAlignmentRight;

    [self.ddView addSubview:self.hourLabel];

    self.minuteLabel = [[UILabel alloc]initWithFrame:CGRectMake(2 *
cutViewW, 10, cutViewW, 30)];

    self.minuteLabel.textAlignment = NSTextAlignmentRight;

    [self.ddView addSubview:self.minuteLabel];

    self.secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(3 *
cutViewW, 10, cutViewW, 30)];

    self.secondLabel.textAlignment = NSTextAlignmentRight;

    [self.ddView addSubview:self.secondLabel];

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息