优雅的自定义上下拉刷新动画

  • 目的:实现自定义的上下拉刷新动画,尽可能少的代码侵入性。
  • 轮子:MJRefresh
  • 大多数方案:继承MJRefresh的相关组件,如MJRefreshGifHeaderMJRefreshAutoGifFooter,然后使用自定义的控件。
  • 缺点:不够雅观,因为我还要自己取一个名字才行。。。总之,不如直接用MJ的6。
  • 解决方案:GifRefreshCategory,里面有MJRefreshGifHeaderMJRefreshAutoGifFooter的两个分类,把文件拖入项目后,再换一换图片就能用了,怎么用,当然是不用你写一行代码,还是用MJ系列的。
    具体实现代码(以header为例):
@implementation MJRefreshGifHeader (Category)

+ (void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        SEL swizzleSelectors[2] = {
            @selector(prepare),
            @selector(placeSubviews)
        };
        for (int i = 0; i < 1;  i++) {
            SEL selector = swizzleSelectors[i];
            NSString *newSelectorStr = [NSString stringWithFormat:@"header_%@", NSStringFromSelector(selector)];
            Method originMethod = class_getInstanceMethod(self, selector);
            Method swizzledMethod = class_getInstanceMethod(self, NSSelectorFromString(newSelectorStr));
            method_exchangeImplementations(originMethod, swizzledMethod);
        }
    });
}

- (void)header_prepare{
    [self header_prepare];//先调用原来的方法
    NSMutableArray *idleImages = [NSMutableArray array];//定义数组存储图片
    for (int i = 0; i<6; i++) {
        NSString *imgName = [NSString stringWithFormat:@"loading0%d",i+1];
        UIImage *img = [UIImage imageNamed:imgName];
        [idleImages addObject:img];
    }
    self.lastUpdatedTimeLabel.hidden = YES;
    self.stateLabel.hidden = YES;
    self.gifView.centerX = WIDTH/2;
    // 设置普通状态的动画图片
    [self setImages:idleImages forState:MJRefreshStateIdle];
    // 设置即将刷新状态的动画图片(一松开就会刷新的状态)
    [self setImages:idleImages forState:MJRefreshStatePulling];
    // 设置正在刷新状态的动画图片
    [self setImages:idleImages forState:MJRefreshStateRefreshing];
}

- (void)header_placeSubviews{
    [self header_placeSubviews];
}
@end

使用时不需要引入头文件,直接用MJ的即可:

    MJRefreshGifHeader *_refreshHeader;
    _refreshHeader = [MJRefreshGifHeader headerWithRefreshingBlock:^{
        [self requestData:1];
    }];
    _tableView.mj_header = _refreshHeader;

是不是很easy?

此处应有demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,276评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,143评论 25 709
  • 《七律·益母草》 ——秋花系列之益母草 深居幽谷问旷野, 意向楼台对山歌。 七色光芒曲折路, 千般滋...
    曦微w行走在路上阅读 2,307评论 0 11
  • 姥姥已经去世将近八年,在她还未完全丧失语言和行动力之前,说要把那一对金耳环赠予我。后来骨瘦如柴躺在床上,分辨不出...
    被踩着的尾巴阅读 278评论 0 3
  • 嫩得还顶着雀斑的拉姆垂着小短腿坐在理疗床上,弗林斯坐在澡房门口的拐角一动不动一言不发,巴拉克的眼泪还没擦干,卡恩穿...
    宇宙无敌小超人___阅读 243评论 0 0