iOS 多个滑动视图嵌套的手势触摸处理
实现思路
界面设计-
前提条件:
- 页面构成: 整体页面为一个滑动视图, 其中最上方为类似 header 并且包含一个 SegementView 的视图, 下方为多个并列的 TableView 或者 ScrollView 视图
- 页面需求: 当滑动下方的视图时需要让 header 跟随滑动直到滑动到 segement 时停止滑动, 接下来就只能滑动下方的 tableview 并且可以无限加载数据以及横向切换 tableview , 当向下滑动的时候, 如果滑动到最顶层的时候 header 会跟随出现.
-
实现思路分析
- 通过监听最外层的 ScrollView 的偏移量, 对其 ScrollEnable 属性进行更改, 使滑动手势的作用对象不同, 实现需求.
- 通过重写每个视图的 hitTest 函数操作响应实现.
- 监听最外层 ScrollView 的偏移量, 通过设置固定的偏移量来保证响应手势的切换.
-
实验结果
- 可以实现需求, 但是因为 ScrollEnable 属性更改之后需要二次滑动才能切换滑动响应视图, 因此, 方案放弃.
- hitTest 函数的响应时机只有手指触摸时的第一下, 因此实现过程太复杂, 放弃.
- 这个方法不是我想出来的, 而是在查找资料的时候发现的大神思路, 此处放链接, 最终证实有效, 完美解决问题.
具体实现
写在最后
-
最终完成后, 还是有个疑问, 同时存在两个滚动视图, 如果一个滚动视图的偏移量确定, 那么滑动手势就会作用在另一个滚动视图上, 这个规则总感觉有些奇怪, 不过以上的需求完成确确实实是建立在这个规则之上, 所以合理利用这个默认的规则还是有好处的.
-
作为主视图的 ScrollView 必须要遵守一个手势协议的代理方法, 并返回 YES.
网友评论