V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
finab
V2EX  ›  iDev

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

  •  
  •   finab ·
    Finb · 2015-07-29 18:06:32 +08:00 · 3087 次点击
    这是一个创建于 3197 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先新闻首页肯定是在一个UIScrollView里 ,这个UIScrollView和侧边栏肯定是某个view(记为父View)的subview。

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

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

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

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

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

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















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

    https://github.com/guojiubo/CWStackController

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

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

    再次感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5270 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 08:17 · PVG 16:17 · LAX 01:17 · JFK 04:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.