这两天,在学习简单的倒计时。在网上搜索的资料中看到了百分之九十的内容不适合我这样的新手看,有些写的太繁杂,有些写的就是不太全,我就还像前两篇那样,分步骤来写。
1.首先在你的项目中,你得获取到你需要进行倒计时的变量,我这就以秒数为例。
@property (nonatomic,assign) int letfSecond;//秒数
假设此时获取到的秒数为60秒。
self.letfSecond = 60;
2.可以直接在-(void)viewDidLoad中创建一个NSTimer(计时器)对象。计时器咋说呢,就是隔一定的时间做一次事情之类的,就像你每天早中晚吃饭一个意思吧。
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:_____ target:_____ selector:_____ userInfo:_____ repeats:_____];
后面的方法就是创建并返回一个新的NSTimer对象和时间表上当前运行循环在默认模式,第一个参数填写定时器的触发之间的秒数,我就填1;第二个参数填写目标,填self;第三个是定时器运作之后触发的方法,就填写个@selecotor(daojishi);第四个是用户信息计时器的用户信息。计时器维护一个强引用这个对象,直到(计时器)失效。这个参数可能是零。就填nil;最后一个就是是否重复,如果重复,计时器将不断重新安排自己直到失效,填写YESorNO都无所谓。
所以这么看来就是
NSTimer *timer =[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(daojishi) userInfo:nil repeats:YES];
3.就是实现定义中的方法了。
-(void)daojishi
{
self.letfSecond--;//开始倒计时了
//写一些你需要做的事情。
if(self.letfSecond == 0)
{
[timer invalidate];
}
}
这样三步一走,一个简单的倒计时就ok了。
补:很多时候,需要把时间显示出来什么的,但是形式不会只是秒数,就比如说有些时候需要倒计时15分钟之类的,那你获取的时间可能并不是你需要的形式。那你就得自己学会转换成自己需要的格式。
这里就顺便说一下转换格式什么的,那个比倒计时要简单的多。
声明两个变量
@property (nonatomic,strong) UILabel *label;
@property (nonatomic,strong) NSString *m_currentTime;
在你想实现的方法中写上
if (letfSecond >0 && letfSecond <900)
{
if (letfSecond > 60)
{
//时间格式改成15:00分钟这样
int minute = letfSecond/60;
int second = letfSecond%60;
self.m_currentTime = [NSString stringWithFormat:@"%d:%02d",minute,second];
}
else
{
//时间格式变成59秒这样
self.m_currentTime = [NSString stringWithFormat:@"%02d秒",letfSecond];
}
}
else
{
self.m_currentTime = @"15分钟";
}
[self.label setText:[NSString stringWithFormat:@"订单在%@后自动撤销此单",self.m_currentTime]];
这段就可以放入上面的-(void)daojishi这个方法中,然后再外面的label上显示出来这么简单的就做好了。
看下图,图上的时间是一直在倒计时的。
github上传的代码简单的倒计时demo。 之前一直用svn,第一次上传到github上,大家要是有啥不懂得可以点开下载了看看呢。