融媒体滑动属于多层UIScrollView 嵌套滚动,超过2层的UIScrollView 嵌套滚动是很复杂的。
通过scrollView.contentOffset.y与临界值进行对比从而修改两者scrollView的isScrollEnabled属性值来达到目的。
缺点:滑动到临界值会使滚动中断,需要二次滑动才会切换scrollView。这种在交互上是难以接受。
通过自定义实现滑动手势。
缺点:滑动手势的复杂多样,很难处理的和系统一样。因为是自定义手势,所以很多细节需要自己去处理。
首先通过手势穿透,实现双层scrollView的同时滚动。接着通过标志位(临界值)来控制何时允许底层的scrollView滚动,以及何时允许上层的scrollView滚动。
注:何时允许哪一层scrollView能滚动,并不是说另外一层scrollView就不能滚动,而是给另外一层scrollView设置了固定的偏移量来达到不能滚动的效果
其实嵌套最大的问题就是手势冲突问题,上层的ScrollView会拦截手势,导致手指在上层ScrollView滑动的时候,下层ScrollView不动。所以我们首先要让手势冲突时,两个手势都去响应。这样,我们滑动的时候,两个scrollView都会滑动。
上下两层scrollView滑动时候都需要对方的offset来计算,所以我们创建一个上下文对象,让两个scrollView都持有,避免了频繁正反向传值的问题。
1 | bounces = false |
此时当下层scrollView偏移量y=0,上层tableView偏移量y=0时,滚动中断,需要二次滑动才会切换tableView。
解决办法:在下层scrollView上添加一个尺寸与上层tableView尺寸大小一致的滑动视图。把上层tableView包裹其中。此滑动问题解决。