需求分析
最近項(xiàng)目需求要求在圖片列表的頂部加上一個(gè)搜索框饰序,實(shí)現(xiàn)的效果和微信的聯(lián)系人信息界面類似档悠,要求在初次進(jìn)入圖片列表時(shí)TableView上方的搜索框隱藏编饺,當(dāng)下拉表時(shí)才顯示搜索框呀酸,上滑時(shí)隱藏搜索框,看來(lái)用searchDisplayController已經(jīng)不能實(shí)現(xiàn)了该贾。因此就考慮寫(xiě)一個(gè)demo
處理思路
根據(jù)UIScrollView的代理scrollViewDidScroll: 然后每次拖動(dòng)時(shí)設(shè)置開(kāi)始點(diǎn)羔杨,通過(guò)滑動(dòng)結(jié)束后的offset判斷界面的上下滑動(dòng)方向。
主要代碼
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"contentOffset-----------%@",NSStringFromCGPoint(scrollView.contentOffset));
CGFloat distance = scrollView.contentOffset.y - self.startPoint.y;
if (fabs(distance) > 10) {
if (self.isShow == NO && distance < 0) {
NSLog(@"出現(xiàn)動(dòng)畫(huà)");
self.isShow = YES;
}
if (self.isShow == YES && distance > 0 && self.startPoint.y >= 0) {
NSLog(@"消失動(dòng)畫(huà)");
self.isShow = NO;
}
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"scrollViewWillBeginDragging-----contentOffset:%@",NSStringFromCGPoint(scrollView.contentOffset));
self.startPoint = scrollView.contentOffset;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"scrollViewDidEndDragging-----contentOffset:%@",NSStringFromCGPoint(scrollView.contentOffset));
CGFloat distance = scrollView.contentOffset.y - self.startPoint.y;
if (self.isShow == YES && distance > 3 && self.startPoint.y >= 0) {
NSLog(@"消失動(dòng)畫(huà)");
self.isShow = NO;
}
self.startPoint = CGPointMake(0, -10000);
}
遇到的問(wèn)題
1 demo使用的是UIScrollview用autolayout自動(dòng)布局時(shí)要設(shè)置contentsize
2 初始的startPoint要設(shè)置為一個(gè)較大的負(fù)值
3 用戶下拉回彈的情況需要處理是否隱藏searchBar
github demo 鏈接地址 歡迎star杨蛋,多多鼓勵(lì)