嵌套视图的核心是处理滑动临界条件,协调手势冲突。
临界条件比较麻烦,但是不是技术难点。
手势冲突看这里:https://www.jianshu.com/p/88e2b5694765
我只说一个方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
这个方法是处理手势冲突用的:在需要接收上层手势的下层视图打开,下层视图与其点击区域的所有子视图就会同时响应上层的所有手势,若关闭,则手势依然于第一个响应视图处响应而不传递。上层视图不需要做额外处理。otherGestureRecognizer.view表示传入手势的视图,即上层可以响应的对应传入视图,通过对此View的判断来决定是否允许此手势透传。
举个例子,我的tableView1.Sub->scrollView1,scrollView1.sub->tableView2;
我在tableView1打开此方法,所有手势允许透传,tableView1、scrollView1、tableView2会同时响应他们可以响应的手势;
此时在tableView1的此方法处判断响应view为scrollView时返回false,则对应的横向手势无法透传,于是此手势被最上层响应视图吸收,现象即为只允许单向滑动视图。
个人观点,未能系统验证,如有疏漏,感谢指正。
网友评论