IOS-倒計時

@interface ViewController ()
{
    dispatch_source_t _timer;
}
    
@property (strong, nonatomic)  UILabel *dayLabel;
@property (strong, nonatomic)  UILabel *hourLabel;
@property (strong, nonatomic)  UILabel *minuteLabel;
@property (strong, nonatomic)  UILabel *secondLabel;

@end
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

在viewdidload里創建label

UILabel *llabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-75, 200, 150, 30)];
llabel.text = @"距離一周結束只有:";
llabel.textAlignment = NSTextAlignmentCenter;
llabel.textColor = [UIColor redColor];
[self.view addSubview:llabel];

self.dayLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-75, 250, 30, 30)];
self.dayLabel.textColor = [UIColor whiteColor];
self.dayLabel.textAlignment = NSTextAlignmentCenter;
self.dayLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.dayLabel];

self.hourLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+40-75, 250, 30, 30)];
self.hourLabel.textColor = [UIColor whiteColor];
self.hourLabel.textAlignment = NSTextAlignmentCenter;
self.hourLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.hourLabel];

self.minuteLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+80-75, 250, 30, 30)];
self.minuteLabel.textColor = [UIColor whiteColor];
self.minuteLabel.textAlignment = NSTextAlignmentCenter;
self.minuteLabel.backgroundColor = [UIColor blackColor];

[self.view addSubview:self.minuteLabel];

self.secondLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+120-75, 250, 30, 30)];
self.secondLabel.textColor = [UIColor whiteColor];
self.secondLabel.textAlignment = NSTextAlignmentCenter;
self.secondLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.secondLabel];

獲取從現在到一周后的總秒數

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    
    NSDate *endDate = [dateFormatter dateFromString:[self getyyyymmdd]];
    
    NSDate *endDate_week = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + (24*3600)*5)];
    NSDate *startDate = [NSDate date];
    NSTimeInterval timeInterval =[endDate_week timeIntervalSinceDate:startDate];

做計算

    if (_timer==nil) {
        __block int timeout = timeInterval; //倒計時時間
        NSLog(@"timeout:%d",timeout);
        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));
                    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 *formatDay = [[NSDateFormatter alloc] init];
    formatDay.dateFormat = @"yyyy-MM-dd";
    NSString *dayStr = [formatDay stringFromDate:now];
    
    return dayStr;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容