一、MJRefresh是什麼
MJRefresh是一款非常優秀的下拉刷新框架,支持UITableView、UICollectionView、UIWebView、UIScrollView等常見的控件上使用下拉刷新,功能強大,使用靈活方便。下拉刷新是現代APP開發中常用的功能,通過下拉刷新能夠及時地獲取最新數據,增強用戶體驗,而MJRefresh就是在這個時代背景下生產出來的。
MJRefresh具有很多特點:
1. 下拉刷新和上拉刷新功能全面:不僅支持UITableView和UICollectionView,還支持UIScrollView、UIWebView等
2. 使用簡單:創始人使用block回調方法,傳統的代理方式已經廢棄
3. 擴展性強:具有良好的擴展性,支持自定義控件,自定義控件需要繼承MJRefreshStateHeader和MJRefreshAutoFooter。
4. 支持多種刷新動畫效果:提供常用的刷新動畫(gif、圖片、水滴效果、旋轉等)
總之,MJRefresh是一個強大並且易於使用的下拉刷新框架,是iOS開發中不可缺少的工具之一。
二、MJRefresh的使用
1. 基於UITableView使用
在使用UITableView的時候,只需要在UITableView上添加MJRefresh即可。
__weak typeof(self) weakSelf = self;
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 刷新數據的操作代碼寫在這裡
[weakSelf.tableView reloadData];
// 結束刷新
[weakSelf.tableView.mj_header endRefreshing];
}];
2. 基於UICollectionView使用
在使用UICollectionView的時候,只需要在UICollectionView上添加MJRefresh即可。
__weak typeof(self) weakSelf = self;
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 加載更多數據的操作代碼寫在這裡
// ...
// 結束加載更多
[weakSelf.collectionView.mj_footer endRefreshing];
}];
3. 基於UIScrollView使用
在使用UIScrollView的時候,同樣是添加MJRefresh。
__weak typeof(self) weakSelf = self;
self.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 刷新數據的操作代碼寫在這裡
[weakSelf.scrollView reloadData];
// 結束刷新
[weakSelf.scrollView.mj_header endRefreshing];
}];
三、MJRefresh的進階使用
1. 自定義刷新控件
如果你想要一個更炫酷的下拉刷新控件,可以考慮使用MJRefresh提供的自定義刷新控件。
比如我們可以自定義一個帶有菊花的下拉刷新控件:
#import "MJRefreshStateHeader.h"
@interface CustomHeader : MJRefreshStateHeader
@property (nonatomic, strong) UIImageView *logo;
@property (nonatomic, strong) UIActivityIndicatorView *loading;
@end
@implementation CustomHeader
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourLogo"]];
[self addSubview:self.logo];
self.loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self addSubview:self.loading];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
self.logo.frame = CGRectMake(self.bounds.size.width/2.0-50, 20, 100, 30);
self.loading.center = CGPointMake(self.bounds.size.width/2.0, 70);
}
- (void)setState:(MJRefreshState)state {
[super setState:state];
switch (state) {
case MJRefreshStateIdle:
self.loading.hidden = YES;
[self.loading stopAnimating];
break;
case MJRefreshStatePulling:
self.loading.hidden = YES;
[self.loading stopAnimating];
break;
case MJRefreshStateRefreshing:
self.loading.hidden = NO;
[self.loading startAnimating];
break;
case MJRefreshStateWillRefresh:
break;
case MJRefreshStateNoMoreData:
break;
}
}
@end
使用這個自定義刷新控件只需要在初始化MJRefreshHeader時賦值即可:
self.tableView.mj_header = [CustomHeader headerWithRefreshingBlock:^{
[weakSelf.tableView reloadData];
[weakSelf.tableView.mj_header endRefreshing];
}];
2. 加載更多酷炫的動畫:
還可以使用MJRefresh提供的多種刷新動畫效果,使應用更加酷炫的效果,比如下面這個gif圖:
這個gif效果使用步驟如下:
// 1. 初始化
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 2. 設置動畫圖片
NSMutableArray *idleImages = [NSMutableArray array];
for (NSUInteger i = 1; i<=60; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];
[idleImages addObject:image];
}
[header setImages:idleImages forState:MJRefreshStateIdle];
[header setImages:idleImages forState:MJRefreshStatePulling];
[header setImages:idleImages duration:1 forState:MJRefreshStateRefreshing];
// 3. 設置header
self.tableView.mj_header = header;
3. 自定義上拉加載更多的文字
在MjRefresh中可以定製上拉加載更多的文字,只需要在初始化MJRefreshAutoFooter時設置即可:
MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 加載更多數據的操作代碼寫在這裡
// ...
// 結束加載更多
[weakSelf.collectionView.mj_footer endRefreshing];
}];
[footer setTitle:@"加載中..." forState:MJRefreshStateRefreshing];
[footer setTitle:@"鬆開加載更多" forState:MJRefreshStatePulling];
[footer setTitle:@"沒有更多數據了" forState:MJRefreshStateNoMoreData];
self.collectionView.mj_footer = footer;
四、小結
MJRefresh是一款非常好用的下拉刷新框架,本文對其進行了詳細的介紹。通過本文,我們可以了解到MJRefresh的基本使用方法,還學習了如何使用自定義下拉刷新控件、自定義上拉加載更多的文字、如何實現更多令人印象深刻的刷新動畫。總之,MJRefresh是我們在iOS下拉刷新中不可缺少的一個工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200326.html
微信掃一掃
支付寶掃一掃