iOS自定義MJRefresh上拉和下拉重新整理動畫
最近利用MJRefresh
做了一個下拉重新整理和上拉載入的動畫,先上效果圖:
基本思路:
- 製作下拉動畫時我們只需要在
MJRefresh
的MJRefreshGifHeader
類中新增我們所需要Gif圖片,並隱藏掉提示文字即可。 - 製作上拉動畫同理,需要在
MJRefresh
的MJRefreshBackGifFooter
類或者MJRefreshAutoGifFooter
類中新增我們所需要Gif圖片,並隱藏掉提示文字即可。(MJRefreshBackGifFooter
和MJRefreshAutoGifFooter
的區別是:前者只有上拉才會顯示,是預設的上拉控制元件,而後者則是新增在所需要重新整理檢視下面,上拉或者點選文字均可觸發載入動畫)
一、下拉重新整理
- 建立一個gif類
CustomGifHeader
繼承自MJRefreshGifHeader
。
@interface CustomGifHeader : MJRefreshGifHeader
- 重寫父類方法
- (void)prepare NS_REQUIRES_SUPER;
,在方法中新增gif圖片,並設定普通閒置狀態MJRefreshStateIdle
、即將重新整理狀態MJRefreshStatePulling
和正在重新整理狀態MJRefreshStateRefreshing
下對應載入的gif動畫。
#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;
}
- 重寫控制子控制元件frame方法
- (void)placeSubviews NS_REQUIRES_SUPER;
隱藏對應的文字顯示。
#pragma mark - 實現父類的方法
- (void)placeSubviews {
[super placeSubviews];
//隱藏狀態顯示文字
self.stateLabel.hidden = YES;
//隱藏更新時間文字
self.lastUpdatedTimeLabel.hidden = YES;
}
- 在控制器中建立重新整理
gifHeader
。
- (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
新增重新整理gifHeader
。
_tableView.mj_header = self.gifHeader;
二、上拉載入
- 建立一個gif類
CustomGifFooter
繼承自MJRefreshBackGifFooter
。(這裡預設以繼承MJRefreshBackGifFooter
為例,如果繼承自MJRefreshAutoGifFooter
,則和該過程類似)
@interface CustomGifFooter : MJRefreshBackGifFooter
- 重寫父類方法
- (void)prepare NS_REQUIRES_SUPER;
(和下拉重新整理一樣)。 - 重寫控制子控制元件frame方法
- (void)placeSubviews NS_REQUIRES_SUPER;
隱藏對應的文字顯示。
- (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;
}
- 在控制器中建立重新整理
gifFooter
。
- (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
新增重新整理gifFooter
。
_tableView.mj_footer = self.gifFooter;
如果建立的上拉載入gif類繼承自MJRefreshAutoGifFooter
,則載入效果如下,其中的文字提示可以通過重寫父類方法- (void)placeSubviews NS_REQUIRES_SUPER;
設定self.stateLabel.hidden = YES;
隱藏掉。
Demo地址:MJRefresh載入動畫
相關文章
- Android從零擼美團(二) - 仿美團下拉重新整理自定義動畫Android動畫
- Android從零擼美團(二) – 仿美團下拉重新整理自定義動畫Android動畫
- Flutter——下拉重新整理,上拉載入Flutter
- uni-app | 上拉載入和下拉重新整理探索APP
- 上拉載入下拉重新整理瞭解下
- flutter - listView 下拉重新整理 上拉載入FlutterView
- 微信小程式-自定義下拉重新整理微信小程式
- 如何實現上拉載入,下拉重新整理?
- Flutter 實現下拉重新整理&上拉載入Flutter
- Flutter listview下拉重新整理 上拉載入更多FlutterView
- React Native 實現自定義下拉重新整理元件React Native元件
- 自定義一個下拉重新整理控制元件控制元件
- H5下拉重新整理和上拉載入實現原理淺析H5
- Flutter下拉重新整理,上拉載入更多資料Flutter
- 移動端用下拉重新整理的方式實現上拉載入
- 移動端上拉載入和下拉重新整理的vue外掛Vue
- vue移動端下拉重新整理和上拉載入元件,體積小執行快Vue元件
- 自定義View——仿騰訊TIM下拉重新整理ViewView
- iOS動畫進階 – 實現炫酷的上拉重新整理動效(二)| 掘金技術徵文iOS動畫
- Flutter ListView封裝,下拉重新整理、上拉載入更多FlutterView封裝
- 【微信小程式】scroll-view 的上拉載入和下拉重新整理微信小程式View
- recyclerView的側拉效果。上拉載入。下拉重新整理,點選事件等等View事件
- flutter上拉載入更多下拉重新整理通用widget,child可以是任何widget,支援自定義多種狀態顯示Flutter
- 下拉重新整理,上拉載入外掛mescroll原始碼分析原始碼
- vue 實現上拉載入下拉重新整理(思路賊清晰)Vue
- 直播平臺原始碼,自定義下拉重新整理控制元件原始碼控制元件
- 自定義View合輯(5)-仿QQ郵箱下拉重新整理View
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- 搭建自己的直播平臺,RecycleView下拉重新整理,上拉載入View
- Flutter 下拉重新整理上拉載入更多Flutter
- uniapp專案實踐總結(十六)自定義下拉重新整理元件APP元件
- Flutter動畫之自定義動畫元件-FlutterLayoutFlutter動畫元件
- flutter - RefreshIndicator實現下拉重新整理、上拉載入 | 掘金技術徵文FlutterIndicator
- HarmonyOS 下拉重新整理 上拉載入更多 第二種實現方式
- 搞定動畫之 JQuery 中的自定義動畫動畫jQuery
- TransitionAnimation自定義轉場動畫NaN動畫
- 【Android初級】如何實現一個有動畫效果的自定義下拉選單Android動畫
- 實現移動端上拉載入和下拉重新整理的vue外掛(mescroll.js)VueJS