Latest 1.0.0
Homepage https://github.com/04zhujunjie/ZJJTimeCountDown
License MIT
Platforms ios 8.0, requires ARC
Authors

效果图

image

特点:

1、已封装,支持自定义
2、支持文本各种对齐模式
3、各种效果都可以通过设置ZJJTimeCountDownLabel类属性来实现
4、支持背景图片设置
5、分文本显示时间时,支持设置文字大小,来动态设置每个文本宽度
6、动态的每个Cell中可支持多个倒计时

支持pod导入

pod ‘ZJJTimeCountDown’, ‘~> 1.0.0’

使用注意事项:      

1、显示倒计时的label要使用ZJJTimeCountDownLabel类或者继承ZJJTimeCountDownLabel类      
2、要在使用label前设置label属性,动态Cell上使用一定要设置timeKey属性值,非动态Cell上使用不需要设置timeKey属性值,因为内部实现已经设置好
3、在动态的UITableViewCell或UICollectionViewCell上使用倒计时label,要在UITableView或UICollectionView显示数据的代理中设置label的IndexPath属性
和调用ZJJTimeCountDown类中的以下方法,防止滑动过快出现闪情况        

- (NSAttributedString *)countDownWithModel:(id)model timeLabel:(ZJJTimeCountDownLabel *)timeLabel;

4、设置textAdjustsWidthToFitFont属性值为YES,要确保label宽度够长

ZJJTimeCountDownLabel 支持对齐方式

//文本对齐方式
typedef NS_ENUM(NSInteger ,ZJJTextAlignmentStlye){

    ZJJTextAlignmentStlyeLeftCenter = 0,
    ZJJTextAlignmentStlyeLeftTop,
    ZJJTextAlignmentStlyeLeftBottom,
    ZJJTextAlignmentStlyeCenterTop,
    ZJJTextAlignmentStlyeCenter,
    ZJJTextAlignmentStlyeCenterBottom,
    ZJJTextAlignmentStlyeRightTop,
    ZJJTextAlignmentStlyeCenterRight,
    ZJJTextAlignmentStlyeRightBottom,
    //自定义位置,配合textLeftDeviation和textTopDeviation属性值来使用
    ZJJTextAlignmentStlyeCustom,
    //水平居中,配合textLeftDeviation属性值来使用
    ZJJTextAlignmentStlyeHorizontalCenter,
    //垂直居中 配合textTopDeviation属性值来使用
    ZJJTextAlignmentStlyeVerticalCenter,

};

ZJJTimeCountDown 支持时间格式:

typedef NS_ENUM(NSInteger , ZJJCountDownTimeStyle) {

    //时间格式:2017-7-12 18:06:22
    ZJJCountDownTimeStyleNormal = 0,
    //时间戳:1591881249
    ZJJCountDownTimeStyleTamp,
    //时间格式 20170712180622
    ZJJCountDownTimeStylePureNumber

};

如何使用  

一、使用ZJJTimeCountDownLabel类或继承ZJJTimeCountDownLabel类来创建倒计时label ,       并在初始化视图时设置label属性,动态Cell上的label的timeKey属性一定要设置,推荐以下三种设置方式

1)、如果是使用继承ZJJTimeCountDownLabel类,在该类的.m文件中重写以下方法        

- (void)setupProperty{
    //对应模型中要显示的倒计时的属性字符串(动态Cell中,必须要设置timeKey)
    self.timeKey = @"endTime";
     //边框模式
    self.textStyle = ZJJTextStlyeDDHHMMSSBox;
    //居中对齐
    self.jj_textAlignment = ZJJTextAlignmentStlyeCenter;
    //设置过时数据自动删除
    self.isAutomaticallyDeleted = YES;
}

2)、直接使用ZJJTimeCountDownLabel类,如果非xib形式,初始化时进行设置

    self.timeLabel = [[ZJJTimeCountDownLabel alloc] init];
    //对应模型中要显示的倒计时的属性字符串(动态Cell中,必须要设置timeKey)
    self.timeLabel.timeKey = @"endTime";
     //边框模式
    self.timeLabel.textStyle = ZJJTextStlyeDDHHMMSSBox;
    //居中对齐
    self.timeLabel.jj_textAlignment = ZJJTextAlignmentStlyeCenter;
    //过时后,显示的文字
    self.timeLabel.jj_description = @"活动结束了!😄😄";

3)、直接使用ZJJTimeCountDownLabel类,如果是xib形式,在ZJJTimeCountDownLabel的父视图初始化时设置

  - (void)awakeFromNib {
    [super awakeFromNib];
      //对应模型中要显示的倒计时的属性字符串(动态Cell中,必须要设置timeKey)
    self.timeLabel.timeKey = @"endTime";
    //居中对齐
    self.timeLabel.jj_textAlignment = ZJJTextAlignmentStlyeCenter;
    //过时后,显示的文字
    self.timeLabel.jj_description = @"活动结束了!😄😄";
}

二、创建ZJJTimeCountDown对象,不同的使用场景,创建ZJJTimeCountDown对象的方法也有所不同,以下两种使用场景

1、在动态的UITableViewCell或UICollectionViewCell上使用

1)、创建JJTimeCountDown对象的方法

_countDown = [[ZJJTimeCountDown alloc] initWithScrollView:self.tableView dataList:self.dataList];

2)、在代理方法中设置label的indexPath和attributedText属性

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *cellID = @"cellID";
    ZJJTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil) {
        cell = [[ZJJTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID];
    }
    TimeModel *model = self.dataList[indexPath.row];
    //必须设置所显示的行
    cell.timeLabel.indexPath = indexPath;
    //在不设置为过时自动删除情况下 滑动过快的时候时间不会闪
    cell.timeLabel.attributedText = [self.countDown countDownWithModel:model timeLabel:cell.timeLabel];

    return cell;
}

2 非动态的UITableViewCell或UICollectionViewCell上使用

1)创建JJTimeCountDown对象并添加label

    _countDown = [[ZJJTimeCountDown alloc] init];
    //时间格式为时间戳
    _countDown.timeStyle = ZJJCountDownTimeStyleTamp;
    //设置代理
    _countDown.delegate = self;
    //添加数据, time:时间戳
    [_countDown addTimeLabel:self.timeLabel time:@"1591881249"];

三、ZJJTimeCountDown代理方法

/**
 过时的数据自动删除回调方法, 针对UITableView 或者 UICollectionView上的倒计时视图

 @param model 数据模型
 */
- (void)scrollViewWithAutomaticallyDeleteModel:(id)model;
/**
 过时的数据回调方法,回调的数据调用addTimeLabel:(ZJJTimeCountDownLabel *)timeLabel time:(NSString *)time方法所添加数据

 @param timeLabel 倒计时视图
 @param timeCountDown self
 */
- (void)outDateTimeLabel:(ZJJTimeCountDownLabel *)timeLabel timeCountDown:(ZJJTimeCountDown *)timeCountDown;

/**
 每次执行倒计时,回调方法
 @param timeLabel 倒计时Label
 @param timeCountDown self
 */
- (void)dateWithTimeLabel:(ZJJTimeCountDownLabel *)timeLabel timeCountDown:(ZJJTimeCountDown *)timeCountDown;

/**
 自定义时间格式方法 ,需要设置timeLabel的textStyle为ZJJTextStlyeCustom,自定义时间样式才会生效
 如果返回值为nil或者@“”,自定义时间格式失败,失败后显示原来时间格式
 @param timeLabel 时间label
 @param timeCountDown self
 @return 自定义时间格式字符
 */
- (NSAttributedString *)customTextWithTimeLabel:(ZJJTimeCountDownLabel *)timeLabel timeCountDown:(ZJJTimeCountDown *)timeCountDown;

四、销毁定时器

- (void)dealloc{
    [self.countDown destoryTimer];
}

问题

在动态Cell上,设置ZJJTimeCountDownLabel的isAutomaticallyDeleted属性值为YES时(过时的数据自动删除),如果Cell在滑动快的时候,过时的数据未能及时删除

Latest podspec

{
    "name": "ZJJTimeCountDown",
    "version": "1.0.0",
    "summary": "u4e00u4e2au5df2u5c01u88c5uff0cu7b80u5355u6613u7528u7684u5012u8ba1u65f6",
    "homepage": "https://github.com/04zhujunjie/ZJJTimeCountDown",
    "license": "MIT",
    "authors": {
        "xiaozhu": "[email protected]"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source": {
        "git": "https://github.com/04zhujunjie/ZJJTimeCountDown.git",
        "tag": "1.0.0"
    },
    "source_files": "ZJJTimeCountDown/*.{h,m}",
    "public_header_files": "ZJJTimeCountDown/*.h",
    "requires_arc": true
}

Pin It on Pinterest

Share This