在iOS开发中有时会有cell上进行跑秒的需求,如每个cell上显示的每个商品的信息,每个商品都有一个时间的倒计时,当时间为0的时候就可以进行秒杀了。
我说一下我在实现这个需求的一些思路。
首先我们需要从后台获取这个剩余时间,这个剩余时间只有我们请求这个接口中的数据的时候这个剩余时间才进行刷新。我们在拿到这个剩余时间之后我们就要对这个剩余时间进行跑秒了,首先需要调用一个方法,我们假设这个方法名为A,我们调用方法A将我们拿到的时间显示在cell的某个label上。在方法A中我们要将剩余时间做一个减法的操作即将当前时间减去1秒,要想真正地实现跑秒的效果,我们需要每一秒都调用一下方法A。这时我们就需要在显示TableView的控制器中发送一个通知,这个通知是每过一秒就发送一个通知,然后在cell中接收这个通知,接收到通知之后去调用方法A,这样就实现了每过一秒就调用一次方法A,即对剩余时间做一个减1的操作,从而实现了跑秒的效果。
主要代码:
#pragma mark - 倒计时通知回调
- (void)countDownNotification {
/// 判断是否需要倒计时 -- 可能有的cell不需要倒计时,根据真实需求来进行判断
if (0) {
return;
}
/// 计算倒计时
NSString * count = [NSString stringWithFormat:@"%lld", _time]; // 剩余的秒数
NSInteger countDown = [count integerValue] - kCountDownManager.timeInterval;
// NSInteger countDown = 100 - kCountDownManager.timeInterval;
/// 当倒计时到了进行回调
if (countDown <= 0) {
_timeLbl.text = @"00小时00分钟00秒";
// 回调给控制器
!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
核心思想:每次都用返回的时间减去从记时开始过去的时间得到剩余的时间
手动调用是为了每次给时间赋值的时候去刷新时间,通知调用是为了每过一秒刷新一下时间
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。😊