前言

项目开发中用了MJRefres 刷新控件,但是MJRefresh默认的加载样式感觉比较丑,产品觉得需要换个样式,弄的简洁一点。于是着手看了一下MJRefresh的源码,发现其提供了修改样式的方法。

从MJRefresh的继承图谱来看,带动画的下拉刷新类为:MJRefreshGifHeader,带动画的上拉刷新类为:MJRefreshBackGifFooter。我们只需要分别继承这两个类,然后把加载动画的功能重写一下就可以实现了。

一、自定义下拉刷新动画

自己重新创建一个类:HSRefreshGifHeader,继承 MJRefreshGifHeader。具体代码如下:

#import "MJRefreshGifHeader.h"@interface HSRefreshGifHeader : MJRefreshGifHeader@end
#import "HSRefreshGifHeader.h"@implementation HSRefreshGifHeader#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];
}- (void)placeSubviews {[super placeSubviews];//隐藏状态显示文字self.stateLabel.hidden = YES;//隐藏更新时间文字self.lastUpdatedTimeLabel.hidden = YES;
}#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;
}@end

二、自定义上拉刷新动画

自己重新创建一个类:HSRefreshGifFooter,继承 MJRefreshBackGifFooter。具体代码如下:

#import "MJRefreshBackGifFooter.h"@interface HSRefreshGifFooter : MJRefreshBackGifFooter@end
#import "HSRefreshGifFooter.h"@interface HSRefreshGifFooter ()@end@implementation HSRefreshGifFooter#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];
}- (void)placeSubviews {[super placeSubviews];self.stateLabel.hidden = self.state != MJRefreshStateNoMoreData;
}- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
{[super scrollViewContentSizeDidChange:change];// 内容的高度CGFloat contentHeight = self.scrollView.mj_contentH + self.ignoredScrollViewContentInsetBottom;// 表格的高度CGFloat scrollHeight = self.scrollView.mj_h - self.scrollViewOriginalInset.top - self.scrollViewOriginalInset.bottom + self.ignoredScrollViewContentInsetBottom;// 设置位置和尺寸self.mj_y = MAX(contentHeight, scrollHeight);}#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;
}@end

三、如何使用

//导入相关头文件
#import "HSRefreshGifHeader.h"
#import "HSRefreshGifFooter.h"//下拉刷新self.tableView.mj_header = [HSRefreshGifHeader headerWithRefreshingBlock:^{self.page = 1;[self.arrData removeAllObjects];[self requestData];}];//上拉加载更多self.tableView.mj_footer = [HSRefreshGifFooter footerWithRefreshingBlock:^{self.page ++;[self requestData];}];

自己准备好动画图片:

资源下载:https://download.csdn.net/download/u010545480/86018815

iOS MJRefresh 自定义刷新动画相关推荐

  1. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果

    有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...

  2. 使用MJRefresh自定义下拉刷新,上拉加载动画

    有时候我们需要自己设置下拉刷新,上拉加载动画的实现,这里主要是记录下使用MJRefresh自定义下拉刷新,上拉加载动画..... 下拉刷新我们只需要继承MJRefreshGifHeader即可: 实现 ...

  3. iOS MJRefresh下拉刷新(上拉加载)使用详解

    下拉刷新控件目前比较火的有好几种,本人用过MJRefresh 和 SVPullToRefresh,相对而言,前者比后者可定制化.拓展新都更高一点. 因此本文着重讲一下MJRefresh的简单用法. 导 ...

  4. VCTransitionsLibrary –自定义iOS交互式转场动画的库

    简介 VCTransitionsLibrary 提供了许多适用于入栈,出栈,模态等场景下控制器切换时的转场动画.它本身提供了一个定义好的转场动画库,你可以拖到自己工程中直接使用;也提供了许多拥有不同转 ...

  5. iOS学习笔记-自定义过渡动画

    代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...

  6. iOS 关于自定义转场动画,以UITabBarController为例

    1.小记 关于自定义转场动画,只要你理清他的"套路",你就可以随心所欲地自定义了. 大体思路就是:遵守对应的代理协议,然后设置对应的代理,实现代理方法,这个代理方法要返回的值就是你 ...

  7. iOS 类似亲宝宝app下拉刷新动画效果

    iOS 类似亲宝宝app下拉刷新动画效果,最近看了下这种效果,感觉有点意思.于是就实现了一下. 方案一 采用两个背景View1.View2,三个球ball1,ball2,ball3,将ball1,ba ...

  8. iOS自定义过渡动画

    历时5天从各种英文教程中学习到的过渡动画,是一个很难忘的探索经历 比较好的参考文章自定义UIViewController过渡入门 ,动画入门. 转场方式 首先让我们来了解iOS转场的方式: UINav ...

  9. Android自定义下拉刷新动画--仿百度外卖下拉刷新

    好久没写博客了,小编之前一段时间一直在找工作,从天津来到了我们的大帝都,感觉还不错.好了废话不多说了,开始我们今天的主题吧.现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前 ...

最新文章

  1. WebViewJavascriptBridge原理解析
  2. 代码质量第5层-只是实现了功能
  3. 人工智能在医疗行业应用面临的五大挑战
  4. 深度学习在搜索业务中的探索与实践
  5. 「知识表示学习」专题论文推荐 | 每周论文清单
  6. php smarty2 框架,PHP CodeIngiter 2.x.x 框架与 Smarty 3.x.x 模板引擎整合
  7. 单机数据库优化的一些实践
  8. 计算机考研安大好考还是郑大好考,这5所“低调到隐形”的211大学,不仅分数低,还好考...
  9. Windows 和 Linux 上安装 TTF 字体的方法
  10. WPF——自定义日历
  11. 为什么Word 里表格文字无法垂直居中?明明已经设置垂直居中了
  12. 一个app项目如何从想法一步一步落地?有哪些必要的流程?
  13. dtu虚拟服务器,DTU服务器云
  14. Rfb-Net(代码解读慢慢啃).
  15. 马太效应/幂律分布的本质以及其数学表述
  16. 关于OPENGL纹理
  17. 基于H5的Speedtest网速测试工具搭建
  18. android 4.4以上sd卡,怎样无根绕过Android 4.4(KitKat)外部SD卡限制
  19. Prometheus监控系统:监控交换机流量、状态等(snmp_exporter)
  20. MAC系统下安装homebrew(2020.04)

热门文章

  1. AttributeError: module ‘torch.distributed‘ has no attribute ‘_all_gather_base‘
  2. 项目管理的五大过程组和十大知识领域
  3. ISP算法介绍--------super Good
  4. java控制台存钱方法_JAVA实现账户取款和存款操作
  5. 封装win7系统、制作win7GHO镜像、制作一个自定义的镜像文件具体步骤、制作Win10镜像gho
  6. AI反网络诈骗白皮书发布:一场人工智能与电信网络诈骗结合的攻防战
  7. C# Basler相机采集图像
  8. 神经网络冻结层,固定参数
  9. oracle11g-R2数据库的逻辑备份
  10. 仅仅有人物没背景的图片怎么弄_只会画人物不会画背景?这3种方法教你快速画背景!...