小编给大家分享一下iOS中如何实现倒计时效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
天山ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
示例代码简单易懂:
#import@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中如何实现倒计时效果”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!