在iOS開發(fā)中有時會有cell上進(jìn)行跑秒的需求,如每個cell上顯示的每個商品的信息,每個商品都有一個時間的倒計時,當(dāng)時間為0的時候就可以進(jìn)行秒殺了。
我說一下我在實現(xiàn)這個需求的一些思路。
首先我們需要從后臺獲取這個剩余時間,這個剩余時間只有我們請求這個接口中的數(shù)據(jù)的時候這個剩余時間才進(jìn)行刷新。我們在拿到這個剩余時間之后我們就要對這個剩余時間進(jìn)行跑秒了,首先需要調(diào)用一個方法,我們假設(shè)這個方法名為A,我們調(diào)用方法A將我們拿到的時間顯示在cell的某個label上。在方法A中我們要將剩余時間做一個減法的操作即將當(dāng)前時間減去1秒,要想真正地實現(xiàn)跑秒的效果,我們需要每一秒都調(diào)用一下方法A。這時我們就需要在顯示TableView的控制器中發(fā)送一個通知,這個通知是每過一秒就發(fā)送一個通知,然后在cell中接收這個通知,接收到通知之后去調(diào)用方法A,這樣就實現(xiàn)了每過一秒就調(diào)用一次方法A,即對剩余時間做一個減1的操作,從而實現(xiàn)了跑秒的效果。
主要代碼:
#pragma mark - 倒計時通知回調(diào)
- (void)countDownNotification {
/// 判斷是否需要倒計時 -- 可能有的cell不需要倒計時,根據(jù)真實需求來進(jìn)行判斷
if (0) {
return;
}
/// 計算倒計時
NSString * count = [NSString stringWithFormat:@"%lld", _time];? // 剩余的秒數(shù)
NSInteger countDown = [count integerValue] - kCountDownManager.timeInterval;
//? ? NSInteger countDown = 100 - kCountDownManager.timeInterval;
/// 當(dāng)?shù)褂嫊r到了進(jìn)行回調(diào)
if (countDown <= 0) {
_timeLbl.text = @"00小時00分鐘00秒";
// 回調(diào)給控制器
!self.countDownZero ?: self.countDownZero();
return;
}
/// 重新賦值
_timeLbl.text = [NSString stringWithFormat:@"%02zd小時%02zd分鐘%02zd秒", countDown/3600, (countDown/60)%60, countDown%60];
}
效果圖:

附上demo鏈接:https://github.com/yangguanghei/Cell-
2019.3.15
核心思想:每次都用返回的時間減去從記時開始過去的時間得到剩余的時間
手動調(diào)用是為了每次給時間賦值的時候去刷新時間,通知調(diào)用是為了每過一秒刷新一下時間
本篇文章到這里就結(jié)束了,愿大家加班不多工資多,男同胞都有女朋友,女同胞都有男朋友。??