iOS学习专题iOS开发攻城狮的集散地iOS进阶之路

iOS自定义MJRefresh上拉和下拉刷新动画

2018-08-20  本文已影响4人  wuyukobe

最近利用MJRefresh做了一个下拉刷新和上拉加载的动画,先上效果图:

refresh.gif
基本思路:
一、下拉刷新
@interface CustomGifHeader : MJRefreshGifHeader
#pragma mark - 实现父类的方法
- (void)prepare {
    [super prepare];
    //GIF数据
    NSArray * idleImages = [self getRefreshingImageArrayWithStartIndex:1 endIndex:8];
    NSArray * refreshingImages = [self getRefreshingImageArrayWithStartIndex:1 endIndex:8];
    //普通状态
    [self setImages:idleImages forState:MJRefreshStateIdle];
    //即将刷新状态
    [self setImages:refreshingImages forState:MJRefreshStatePulling];
    //正在刷新状态
    [self setImages:refreshingImages forState:MJRefreshStateRefreshing];
}

#pragma mark - 获取资源图片
- (NSArray *)getRefreshingImageArrayWithStartIndex:(NSInteger)startIndex endIndex:(NSInteger)endIndex {
    NSMutableArray * imageArray = [NSMutableArray array];
    for (NSUInteger i = startIndex; i <= endIndex; i++) {
        UIImage * image = [UIImage imageNamed:[NSString stringWithFormat:@"Loading_%zd.tiff",i]];
        if (image) {
            [imageArray addObject:image];
        }
    }
    return imageArray;
}
#pragma mark - 实现父类的方法
- (void)placeSubviews {
    [super placeSubviews];
    //隐藏状态显示文字
    self.stateLabel.hidden = YES;
    //隐藏更新时间文字
    self.lastUpdatedTimeLabel.hidden = YES;
}
- (CustomGifHeader *)gifHeader {
    if (!_gifHeader) {
        _gifHeader = [CustomGifHeader headerWithRefreshingBlock:^{
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self.tableView.mj_header endRefreshing];
            });
        }];
    }
    return _gifHeader;
}
_tableView.mj_header = self.gifHeader;
二、上拉加载
@interface CustomGifFooter : MJRefreshBackGifFooter
- (void)placeSubviews {
    [super placeSubviews];
    //隐藏状态显示文字
    self.stateLabel.hidden = YES;
}

如果该类继承自MJRefreshAutoGifFooter类,则父类方法- (void)placeSubviews NS_REQUIRES_SUPER;实现如下:

- (void)placeSubviews{
    [super placeSubviews];
    //隐藏状态显示文字
//    self.stateLabel.hidden = YES;
    //隐藏刷新状态的文字
    self.refreshingTitleHidden = YES;
}
- (CustomGifFooter *)gifFooter {
    if (!_gifFooter) {
        _gifFooter = [CustomGifFooter footerWithRefreshingBlock:^{
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self.tableView.mj_footer endRefreshing];
            });
        }];
    }
    return _gifFooter;
}
_tableView.mj_footer = self.gifFooter;

如果创建的上拉加载gif类继承自MJRefreshAutoGifFooter,则加载效果如下,其中的文字提示可以通过重写父类方法- (void)placeSubviews NS_REQUIRES_SUPER;设置self.stateLabel.hidden = YES;隐藏掉。

refresh.gif
Demo地址:MJRefresh加载动画
上一篇 下一篇

猜你喜欢

热点阅读