先上动图,看看效果。
先说一下,这种页面主要功能:
1.首先是头部有展示区,可是轮播图或者列表,用于展示重要位置或者功能分区。
2.下方对应n多个列表,页面左右滑动切换底部分页。
3.页面支持下拉刷新和上拉分页(其中上拉先到顶部阈值,在触发分页请求,下拉刷新,下方列表区回到底部初始位置,在触发下拉刷新)。
这种交互马上就应该想到有:手势冲突问题,如果当前接收交互行为的是下方列表区,则滑动列表就会触发上下拉刷新操作。
从交互抽象出具体要求就是:
1.主页面VC接收全部交互行为,从而能判断行为和设置行为。
2.列表VC中滑动能通知主页面VC,从而控制滚动和刷新。
条条大路通罗马,说下我走的路:
1.因为考虑到视频,我采用UIScrollView做主视图容器,我封装一个视图集成UIScrollView,改写
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
让主视图接收到全部交互行为。
在列表区封装的UITableView滚动可以通知到主控制器,可以采用代理,block,通知有很多种方法实现。
在双方互相设置阈值和设置滚动效果。从而达成效果。
思路或者源码:
腾讯特斯拉组件:https://mp.weixin.qq.com/s/hBgvPBP12IQ1s65ru-paWw
仿各大App尝试:https://github.com/SPStore/HVScrollView