我今天給大家寫一個(gè)簡(jiǎn)單的上下拉刷新的基本思路
1:要實(shí)現(xiàn)上下拉刷新炬丸,必須要有一個(gè)可滾動(dòng)的View 所以是UIScrollView UITableView UICollectionView 或者繼承它們的翘悉,其實(shí)UITableView和UICollectionView 都是繼承UIScrollView
2:要弄一個(gè)刷新控件其實(shí)就用一個(gè)UIView ,在UIView 上面添加文字伏尼,圖片,等等其他控件 然后將UIView添加到tableView上墩邀,這里注意要設(shè)置UIView的Y值涯呻,讓UIView的Y值為—H(高)
3:監(jiān)聽滾動(dòng)事件或详,剛才前面說(shuō)到了繼承UIScrollView 所以有個(gè)方法監(jiān)聽它的滾動(dòng)
在這個(gè)方法里面判斷scrollView.contentOffset.y的偏移量
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//如果向下滑動(dòng)剛好是149那么就讓它回到之前正在刷新的狀態(tài)
if (scrollView.contentInset.top == 149) return;
//如果向下滑動(dòng)149的時(shí)候,文字改變?yōu)樗砷_立即刷新
if (scrollView.contentOffset.y <= - 149.0) {
self.label.text = @"松開立即刷新";
} else {//向下滑動(dòng)滑動(dòng)了但是沒有超過(guò)149設(shè)置文字為:下拉可以刷新
self.label.text = @"下拉可以刷新";
}
}
4:有個(gè)滾動(dòng)結(jié)束柒竞,就是拖拽結(jié)束時(shí)候的方法
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
// 進(jìn)入下拉刷新狀態(tài)
if (scrollView.contentOffset.y <= - 149.0) {
self.label.text = @"正在刷新";
//添加一個(gè)動(dòng)畫政供,讓它不會(huì)回彈進(jìn)入導(dǎo)航欄
[UIView animateWithDuration:0.5 animations:^{
UIEdgeInsets inset = scrollView.contentInset;
inset.top = 149;
scrollView.contentInset = inset;
}];
//讓它停留2秒在導(dǎo)航欄底部顯示那個(gè)正在刷新
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.5 animations:^{
UIEdgeInsets inset = scrollView.contentInset;
inset.top = 99;
scrollView.contentInset = inset;
}];
});
}
簡(jiǎn)單用這種思路就可以實(shí)現(xiàn)上下拉刷新了 我這里就提供基本的思路,還要麻煩大家自己寫了啊朽基。
我主要想給大家介紹李明杰的MJRefresh的使用布隔,雖然在github上有Dome 但是很多初學(xué)者還是不會(huì)用。所以我給大家介紹一下基本的使用稼虎,而且也是非常簡(jiǎn)單衅檀,非常好用的。
我這里就不給大家介紹使用MJRefresh的那些基本的使用吧霎俩,因?yàn)榛镜某R姷脑趃ithub搜索MJRefresh基本都看得懂哀军,教大家使用繼承自MJRefresh自定義的
第一步:導(dǎo)入MJRefresh這個(gè)庫(kù)后,繼承MJRefreshNormalHeader
第二步:在.m文件中重寫prepare方法
/**
* 初始化
*/
- (void)prepare
{
[super prepare];
self.automaticallyChangeAlpha = YES;
//給下拉的文字設(shè)置顏色 其實(shí)也可以設(shè)置其他屬性
self.lastUpdatedTimeLabel.textColor = [UIColor orangeColor];
//給狀態(tài)文字設(shè)置顏色
self.stateLabel.textColor = [UIColor orangeColor];
//設(shè)置各種狀態(tài)下的文字
[self setTitle:@"趕緊下拉吧" forState:MJRefreshStateIdle];
[self setTitle:@"趕緊松開吧" forState:MJRefreshStatePulling];
[self setTitle:@"正在加載數(shù)據(jù)..." forState:MJRefreshStateRefreshing];
//將時(shí)間隱藏
// self.lastUpdatedTimeLabel.hidden = YES;
//將狀態(tài)文字隱藏
// self.stateLabel.hidden = YES;
}
/**
* 擺放子控件 其實(shí)這個(gè)placeSubviews和layoutSubviews一樣的
*/
- (void)placeSubviews
{
[super placeSubviews];
//可以在這里調(diào)整那些文字的文字打却,或者添加了其他控件杉适,也可以在這里調(diào)整
}
第三步:在需要刷新界面導(dǎo)入頭文件,然后就開始使用
//這里框架里面提供了一個(gè)mj_header屬性
//調(diào)用去加載新數(shù)據(jù)(發(fā)送請(qǐng)求)的方法
self.tableView.mj_header = [CustomRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];
//開始刷新
[self.tableView.mj_header beginRefreshing];
最后在請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)結(jié)束后需要結(jié)束刷新
// 讓[刷新控件]結(jié)束刷新
[self.tableView.mj_header endRefreshing];
其他的也是類似柳击,可以參照github的使用方法猿推,很簡(jiǎn)單。本篇文章沒寫好捌肴,下次有時(shí)間修改修改
備注:
如果有不足或者錯(cuò)誤的地方還望各位讀者批評(píng)指正蹬叭,可以評(píng)論留言藕咏,筆者收到后第一時(shí)間回復(fù)。
QQ/微信:2366889552 /lan2018yingwei具垫。
簡(jiǎn)書號(hào):凡塵一笑:[簡(jiǎn)書]
http://www.reibang.com/users/0158007b8d17/latest_articles
感謝各位觀眾老爺?shù)拈喿x侈离,如果覺得筆者寫的還湊合,可以關(guān)注或收藏一下筝蚕,不定期分享一些好玩的實(shí)用的demo給大家卦碾。
文/凡塵一笑(簡(jiǎn)書作者)
原文鏈接: http://www.reibang.com/p/8ae080edb3ea
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)起宽,并標(biāo)注“簡(jiǎn)書作者”洲胖。