最近項目中有個頁面效果,具體如下
1.類似tableView上添加CustomView,當tableView頂部停留時時,CustomView可以響應事件
2.當tableView滑動時,遮蓋住CustomView,同時CustomView不能響應事件
初步的設計方案是tableView設置contentInset,CustomView添加到tableView的contentInset處,這樣布局存在的問題是CustomView會與tableView一起滑動,不滿足需求
重新設計的方案是控制器的view上依次添加CustomView、tableView,tableView設置contentInset并將tableView的背景色設為透明,接下來就是對一些UIScrollViewDelegate回調方法的處理
在處理一系列回調方法中,有一個拖動手勢問題讓我糾結了一陣子:慢慢滑動tableView和以一個初速度滑動tableView,下面對兩種拖動手勢做文字上的簡要描述:
方式一 --- 慢慢滑動tableView:是指在手指不離開屏幕的情況下,拖動tableView
方式二 --- 以一個初速度滑動tableView:向屏幕上方或屏幕下方以一個初速度滑動屏幕,并且手指離開屏幕
因為這兩種滑動所走的回調不同,所以需要分別處理
如何區(qū)分這兩種方式的手勢,通過- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate的decelerate。該回調僅僅處理方式一的手勢,可以通過BOOL值decelerate去區(qū)分,YES為方式二,NO為方式一。
因為回調方法中有些自定義的屬性需要配合整個代碼去理解,所以這里只放出一部分關聯(lián)性不強的代碼片段
// 控制導航欄和HeaderView的灰度顯示
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat offsetY = scrollView.contentOffset.y;
CGFloat scale = (offsetY + self.headerViewH) / (self.headerViewH+10);
if (scale > 0.6) {
scale = 0.6;
}
self.hudView.alpha = scale;
}
具體的每個回調方法的處理細節(jié)請戳到:https://github.com/TMMMMMS/TableViewHudEffect.git,demo中每個回調方法都有明確注釋,方便各位看官理解
其實自我感覺這種實現(xiàn)方式還是顯得有些笨拙,個人還是更希望有大神提供給我新的實現(xiàn)思路,與我多多交流 ~ o.0