最近算是跟定時器干上了,因為項目需求,我需要在不同的界面放置定時器倒計時,例如
1548736F-F62D-47DE-9968-9B33C158175F.png
感興趣的可以去這里看另外一種情況如何優(yōu)雅的實現(xiàn) 電商類促銷倒計時(1天:12:時33:分)
廢話不多說直接上代碼
首先在需要定時器的地方創(chuàng)建定時器
以下代碼我是在cell中的setModel方法里面創(chuàng)建的NSTimer,因為我需要拿到時間的數(shù)據(jù)來判斷cell是不是需要創(chuàng)建定時器
每次給NSTimer復(fù)制前一定要把先前的定時器移除掉[self removeTimer]
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countDownAction) userInfo:nil repeats:YES]; //啟動倒計時后會每秒鐘調(diào)用一次方法 countDownAction
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
[self removeTimer];
self.timer = timer;
實現(xiàn)定時器每秒的方法
-(void) countDownAction{
//倒計時-1
self.second -= 1;//second是后臺傳來的時間
//當(dāng)?shù)褂嫊r到0時,做需要的操作
if (self.second == 0){
//隱藏顯示時間的Label
self.promotionTime.hidden = YES;
//移除定時器
[self removeTimer];
}else{
if (self.second<0) {
self.promotionTime.hidden = YES;
[self removeTimer];
return;
}
// 賦值(每次定時器都會到這復(fù)制給timeLabel)
self.promotionTime.text = [NSString stringWithFormat:@"%02zd:%02zd:%02zd", self.second/3600, (self.second/60)%60, self.second%60];
}
}
附上removeTimer方法
#pragma mark - 注銷定時器
- (void)removeTimer
{
[self.timer invalidate];
self.timer = nil;
}
如果還不放心定時器銷毀問題的小伙伴看這里
- (void)dealloc {
[self removeTimer];
self.timer = nil;
}
編碼的路上與大家同行,記錄點滴, 歡迎各位大牛的指正,本人會虛心受教,謝謝!!!