最近项目中有个页面效果,具体如下
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:向屏幕上方或屏幕下方以一个初速度滑动屏幕,并且手指离开屏幕
因为这两种滑动所走的回调不同,所以需要分别处理
如何区分这两种方式的手势,通过- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate的decelerate。该回调仅仅处理方式一的手势,可以通过BOOL值decelerate去区分,YES为方式二,NO为方式一。
因为回调方法中有些自定义的属性需要配合整个代码去理解,所以这里只放出一部分关联性不强的代码片段
// 控制导航栏和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;
}
具体的每个回调方法的处理细节请戳到:https://github.com/TMMMMMS/TableViewHudEffect.git,demo中每个回调方法都有明确注释,方便各位看官理解
其实自我感觉这种实现方式还是显得有些笨拙,个人还是更希望有大神提供给我新的实现思路,与我多多交流 ~ o.0
网友评论