天天看點

iOS中 簡單易懂的秒殺倒計時/倒計時

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

示例代碼簡單易懂:

iOS中 簡單易懂的秒殺倒計時/倒計時
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  

iOS中 簡單易懂的秒殺倒計時/倒計時

#import "viewcontroller.h"  

@interface viewcontroller ()  

{  

     dispatch_source_t _timer;  

}  

@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) {  

                    }  

                    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;  

                        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];  

                            self.hourlabel.text = [nsstring stringwithformat:@"%d",hours];  

                        if (minute<10) {  

                            self.minutelabel.text = [nsstring stringwithformat:@"0%d",minute];  

                            self.minutelabel.text = [nsstring stringwithformat:@"%d",minute];  

                        if (second<10) {  

                            self.secondlabel.text = [nsstring stringwithformat:@"0%d",second];  

                            self.secondlabel.text = [nsstring stringwithformat:@"%d",second];  

                    timeout--;  

                }  

            });  

            dispatch_resume(_timer);  

        }  

    }  

效果:

iOS中 簡單易懂的秒殺倒計時/倒計時

原文位址:http://blog.csdn.net/qq_31810357/article/details/50700292

繼續閱讀