使用MMDrawerController遇到的手势冲突

问题一:和scrollView的横滑手势冲突

场景分析

scrollview上添加了多个页面,横滑实现切换页面,当滑动到第一个页面时,右滑手势不能打开左侧菜单。

解决思路

UIView和手势相关的方法中,除了有addGestureRecognizerremoveGestureRecognizer外,还有下面这个方法:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

官方文档中的描述

Asks the view if the gesture recognizer should be allowed to continue tracking touch events.
Subclasses may override this method and use it to prevent the recognition of particular gestures.
At the time this method is called, the gesture recognizer is in the UIGestureRecognizerStatePossible state and thinks it has the events needed to move to the UIGestureRecognizerStateBegan.
The default implementation of this method returns YES.

大概意思是:询问视图是否允许手势识别器继续跟踪触摸事件。子类可以重写该方法用以阻止特定手势的识别。这个方法调用时,手势识别器的状态是 UIGestureRecognizerStatePossible ,并且考虑是否有需要改变到 UIGestureRecognizerStateBegan 状态的事件。

所以,在手势识别器由 possible 的默认状态切换成 began 之前,会调用这个方法,判断是否可以切换到 began 状态,切换到 began 状态后,手势识别器就会向target 发送动作消息。所以重写该方法,针对特定的手势,返回 NO,从而阻止手势识别器的识别。

解决方法

直接上代码

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
        // 处于第一页且向左滑时
        if (self.contentOffset.x == 0 && [pan translationInView:self].x > 0) {
            return NO;
        }
    }
    return [super gestureRecognizerShouldBegin:gestureRecognizer];
}

在自定义的 UIScrollView 的子类中,重写以上方法。判断拖拽手势的是否向右和 scrollView 是否已经滑动到左边缘,如果满足这两个条件,则阻止 scrollView 对拖拽手势的识别,交给父视图处理。

与tableViewCell的左滑手势冲突

场景分析

项目中的 leftViewController 是一个UITableViewController 对象,cell 支持左滑删除,但是mmDrawer中左滑 leftView 会关闭抽屉效果。

因为左滑 leftView 关闭抽屉效果,并不是必须的功能,仅需要支持点击 centerView 或者左滑 centerView 关闭抽屉即可。
所以发现MMDrawerController 有MMCloseDrawerGestureMode属性。可以改变该属性,从而改变关闭抽屉支持的手势。

解决方法。

上代码:

[self.drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModePanningCenterView|MMCloseDrawerGestureModeTapCenterView];

该属性是枚举类型,

typedef NS_OPTIONS(NSInteger, MMCloseDrawerGestureMode) {
    MMCloseDrawerGestureModeNone                    = 0,
    MMCloseDrawerGestureModePanningNavigationBar    = 1 << 1,
    MMCloseDrawerGestureModePanningCenterView       = 1 << 2,
    MMCloseDrawerGestureModeBezelPanningCenterView  = 1 << 3,
    MMCloseDrawerGestureModeTapNavigationBar        = 1 << 4,
    MMCloseDrawerGestureModeTapCenterView           = 1 << 5,
    MMCloseDrawerGestureModePanningDrawerView       = 1 << 6,
    MMCloseDrawerGestureModeCustom                  = 1 << 7,
    MMCloseDrawerGestureModeAll                     =   MMCloseDrawerGestureModePanningNavigationBar    |
                                                        MMCloseDrawerGestureModePanningCenterView       |
                                                        MMCloseDrawerGestureModeBezelPanningCenterView  |
                                                        MMCloseDrawerGestureModeTapNavigationBar        |
                                                        MMCloseDrawerGestureModeTapCenterView           |
                                                        MMCloseDrawerGestureModePanningDrawerView       |
                                                        MMCloseDrawerGestureModeCustom,
};

可自由选择或组合支持的手势,只要不支持 MMCloseDrawerGestureModePanningDrawerView ,就不会和 cell 左滑删除产生冲突。

总结

使用侧滑菜单,容易产生各种各样的手势冲突,所谓“做的越多,错的越多”,支持的手势类型越多,越容易产生冲突,满足常见需求的前提下,尽量减少不需要支持的手势。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,066评论 4 62
  • Day3 13-6-2017 亲爱的老公,阅读了你发过来的上课笔记,内容很好,不但好好学,并且真的习(执行)出来,...
    JennyMo阅读 155评论 0 0
  • 所谓历史,就是人物与其所背负的命运,帝国的兴盛与衰亡。对于千千万万已成定局的事,我们评头论足,或欣赏,或鄙弃,...
    StraightSnow阅读 792评论 0 4
  • 本篇文章介绍一种设计模式——观察者模式。观察者模式在Android中有着很多的应用,如按钮监听,接口回调以及很多流...
    Ruheng阅读 2,974评论 6 30