1. 程式人生 > >利用MJRefresh 完成下拉出gif動畫重新整理

利用MJRefresh 完成下拉出gif動畫重新整理

先看下需要用到的屬性

@property (nonatomic,strong) NSArray *datasArray;
@property (nonatomic,strong) UITableView *tableView;
@property (nonatomic,strong) NSMutableArray *refreshImages;//重新整理動畫的圖片陣列
@property (nonatomic,strong) NSMutableArray *normalImages;//普通狀態下的圖片陣列
@property (nonatomic,strong) NSTimer *timer;//模擬資料重新整理需要的時間控制器
@property
(nonatomic,assign) int time;

建立一個TableView,並實現代理

 self.tableView = [[UITableView alloc]init];
[self.view addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_top).with.offset(30);
make.left.and.right.equalTo(self.view);
make.bottom.equalTo(self
.view); }]; self.tableView.delegate = self; self.tableView.dataSource = self;

然後開始建立下拉重新整理的header

MJRefreshGifHeader *header =[MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    [header setImages:self.refreshImages forState:MJRefreshStateRefreshing];
    [header setImages:
self.normalImages forState:MJRefreshStateIdle]; [header setImages:self.refreshImages forState:MJRefreshStatePulling]; header.lastUpdatedTimeLabel.hidden= YES;//如果不隱藏這個會預設 圖片在最左邊不是在中間 header.stateLabel.hidden = YES; self.tableView.mj_header = header;

因為gif圖片需要一幀一幀圖片新增 所以self.refreshImages 是個儲存圖片的陣列,還有normalImages 用 懶載入 (點選檢視什麼是懶載入)

/**
 *  @author   (๑• . •๑) xiaoqiB, 15-11-24 15:11:06
 *  普通狀態下的圖片
 */
- (NSMutableArray *)normalImages
{
if (_normalImages == nil) {
_normalImages = [[NSMutableArray alloc] init];
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropDown_1"]];
[self.normalImages addObject:image];
}
return _normalImages;
}
//正在重新整理狀態下的圖片
- (NSMutableArray *)refreshImages
{
if (_refreshImages == nil) {
_refreshImages = [[NSMutableArray alloc] init];
//				迴圈新增圖片
for (NSUInteger i = 1; i<=8; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropDown_%ld", i]];
[self.refreshImages addObject:image];
}
}
return _refreshImages;
}

下面是重新整理時 需要呼叫的方法,本應是獲取網路資料的方法,並在獲取到網路資料時或者獲取失敗時,停止重新整理

-(void)loadNewData {
//模擬重新整理的時間
self.timer  =[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
self.time = 3;
}
-(void)timeAction {
self.time --;
NSLog(@"%d",self.time);
if (self.time == 0) {
//		重新整理資料
[_tableView reloadData];
//		停止重新整理
[_tableView.mj_header endRefreshing];
[self.timer invalidate];
}
}

最後完成效果圖