秒杀倒计时/倒计时iOS代码实现详解手机开发

示例代码简单易懂:

秒杀倒计时/倒计时iOS代码实现详解手机开发每日更新关注:http://weibo.com/hanjunqiang  新浪微博

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

效果:

秒杀倒计时/倒计时iOS代码实现详解手机开发

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/3332.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论