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載入動畫
相關文章
- Swift iOS : 上拉重新整理或者下拉重新整理SwiftiOS
- UITableView:下拉重新整理和上拉載入更多UIView
- 上拉重新整理,下拉載入
- React Native——自定義下拉重新整理上拉載入的列表React Native
- Flutter——下拉重新整理,上拉載入Flutter
- uni-app | 上拉載入和下拉重新整理探索APP
- flutter - listView 下拉重新整理 上拉載入FlutterView
- 上拉載入下拉重新整理瞭解下
- 適配iOS11 UITableview UICollectionView MJRefresh下拉重新整理錯亂iOSUIView
- Android從零擼美團(二) – 仿美團下拉重新整理自定義動畫Android動畫
- Android從零擼美團(二) - 仿美團下拉重新整理自定義動畫Android動畫
- 微信小程式-自定義下拉重新整理微信小程式
- 關於MJRefresh上拉載入不顯示圓圈動畫動畫
- 淺談對MJRefresh(上)下拉重新整理控制元件的理解控制元件
- Flutter 實現下拉重新整理&上拉載入Flutter
- Flutter listview下拉重新整理 上拉載入更多FlutterView
- RecyclerView下拉重新整理 上拉載入 原理DemoView
- 如何實現上拉載入,下拉重新整理?
- H5下拉重新整理和上拉載入實現原理淺析H5
- Flutter下拉重新整理,上拉載入更多資料Flutter
- ListView下拉重新整理,上拉自動載入更多View
- iOS自定義UIView動畫效果iOSUIView動畫
- 【微信小程式】scroll-view 的上拉載入和下拉重新整理微信小程式View
- 淺談微信小程式中的下拉重新整理和上拉載入微信小程式
- 自定義一個下拉重新整理控制元件控制元件
- 自定義View——仿騰訊TIM下拉重新整理ViewView
- Android自定義下拉重新整理控制元件Android控制元件
- iOS自定義轉場動畫(push、pop動畫)iOS動畫
- Flutter ListView封裝,下拉重新整理、上拉載入更多FlutterView封裝
- recyclerView的側拉效果。上拉載入。下拉重新整理,點選事件等等View事件
- iOS自定義 Transitions 動畫總結iOS動畫
- (iOS)帶你寫一個類似MJRefresh的上下拉重新整理控制元件iOS控制元件
- React Native 實現自定義下拉重新整理元件React Native元件
- Android 自定義View UC下拉重新整理效果(二)AndroidView
- Android 自定義View UC下拉重新整理效果(三)AndroidView
- Android 自定義View UC下拉重新整理效果(一)AndroidView
- 下拉重新整理,上拉載入外掛mescroll原始碼分析原始碼
- vue 實現上拉載入下拉重新整理(思路賊清晰)Vue