老版 iOS 网易新闻往左滑倒第一页,继续滑会滑出侧边栏,是如何处理手势事件的呢?

2015-07-29 18:06:32 +08:00
 finab
首先新闻首页肯定是在一个UIScrollView里 ,这个UIScrollView和侧边栏肯定是某个view(记为父View)的subview。

手指在首页第一页滑动时,肯定是要触发 UiIScrollView 的pan手势的,
pan手势识别后发现是往右滑动,就正常处理手势事件,UIScrollView正常往右滑动
pan手势识别后发现是往左移动,就需要取消当前手势,让父View继续识别pan手势,打开侧边栏

问题: 这里怎么取消当前识别了的手势,并让父View继续识别pan手势呢?nextResponder touches 系列方法并不能 因为调用时,手势识别都结束了

上面那种想法太理想了,估计可能实现不了,
于是有第二种想法

父View中 实现 shouldBeRequiredToFailByGestureRecognizer 方法
当发现是往左滑时,返回YES 直接截胡把事情办了,UIScrollView上就不会识别到手势了
当发现是往右滑时,返回NO ,自己不处理了,然后UIScrollView正常识别处理

但是当我判断左滑右滑时,发现这个方法还不能识别左滑右滑,因为手势还是开始状态,只有手指第一下点的坐标
而能判断左滑右滑的事件里,已经来不及截胡了,
所以现在只能做到 左侧边缘滑动,滑出左侧菜单 ,而做不到老版网易新闻那样

想问问大家有没有类似的实现,或者可以给我个思路
3103 次点击
所在节点    iDev
5 条回复
codeface
2015-07-29 19:19:38 +08:00
ca1123
2015-07-29 19:35:03 +08:00
你这么想:
每次一pan都先问:"要不要侧边栏啊~"
如果发现不是第一页 就说:"不要~ 不要~ 叔叔我们不要~"
然后执行翻页
如果发现是第一页 就说:"约!"
然后显示边栏















以上都是我胡扯的....
doluvor
2015-07-29 19:40:39 +08:00
可以考虑在Pan手势回调里面计算手势同touch点的位移,根据x位移的正负来处理。
black
2015-07-30 10:38:08 +08:00
很早以前解决过这个问题:

https://github.com/guojiubo/CWStackController

demo 里面有楼主想要的
finab
2015-07-30 20:09:55 +08:00
@black 谢谢,当拜读你的代码时,发现 UIKit/UIGestureRecognizerSubclass.h 这个可以修改GestureRecognizer 的state的时候,我就知道我的问题解决了

我将首页的scrollView的pan手势 requireGestureRecognizerToFail 侧边栏手势
这样侧边栏手势能先于scrollView识别,识别过程中根据条件设置 Failed 就能实现我需要的效果

再次感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209339

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX