使用MMDrawerController遇到的手勢沖突

問題一:和scrollView的橫滑手勢沖突

場景分析

scrollview上添加了多個頁面强法,橫滑實現(xiàn)切換頁面万俗,當滑動到第一個頁面時,右滑手勢不能打開左側(cè)菜單饮怯。

解決思路

UIView和手勢相關(guān)的方法中闰歪,除了有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.

大概意思是:詢問視圖是否允許手勢識別器繼續(xù)跟蹤觸摸事件蓖墅。子類可以重寫該方法用以阻止特定手勢的識別库倘。這個方法調(diào)用時临扮,手勢識別器的狀態(tài)是 UIGestureRecognizerStatePossible ,并且考慮是否有需要改變到 UIGestureRecognizerStateBegan 狀態(tài)的事件教翩。

所以杆勇,在手勢識別器由 possible 的默認狀態(tài)切換成 began 之前,會調(diào)用這個方法饱亿,判斷是否可以切換到 began 狀態(tài)蚜退,切換到 began 狀態(tài)后,手勢識別器就會向target 發(fā)送動作消息路捧。所以重寫該方法关霸,針對特定的手勢,返回 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 是否已經(jīng)滑動到左邊緣佳遣,如果滿足這兩個條件,則阻止 scrollView 對拖拽手勢的識別凡伊,交給父視圖處理零渐。

與tableViewCell的左滑手勢沖突

場景分析

項目中的 leftViewController 是一個UITableViewController 對象,cell 支持左滑刪除系忙,但是mmDrawer中左滑 leftView 會關(guān)閉抽屜效果诵盼。

因為左滑 leftView 關(guān)閉抽屜效果,并不是必須的功能银还,僅需要支持點擊 centerView 或者左滑 centerView 關(guān)閉抽屜即可风宁。
所以發(fā)現(xiàn)MMDrawerController 有MMCloseDrawerGestureMode屬性∮挤瑁可以改變該屬性戒财,從而改變關(guān)閉抽屜支持的手勢。

解決方法捺弦。

上代碼:

[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 左滑刪除產(chǎn)生沖突幽崩。

總結(jié)

使用側(cè)滑菜單,容易產(chǎn)生各種各樣的手勢沖突寞钥,所謂“做的越多歉铝,錯的越多”,支持的手勢類型越多凑耻,越容易產(chǎn)生沖突太示,滿足常見需求的前提下,盡量減少不需要支持的手勢香浩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末类缤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邻吭,更是在濱河造成了極大的恐慌餐弱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囱晴,死亡現(xiàn)場離奇詭異膏蚓,居然都是意外死亡,警方通過查閱死者的電腦和手機畸写,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門驮瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枯芬,你說我怎么就攤上這事论笔。” “怎么了千所?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵狂魔,是天一觀的道長。 經(jīng)常有香客問我淫痰,道長最楷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任待错,我火速辦了婚禮籽孙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朗鸠。我一直安慰自己蚯撩,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布烛占。 她就那樣靜靜地躺著胎挎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忆家。 梳的紋絲不亂的頭發(fā)上犹菇,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音芽卿,去河邊找鬼揭芍。 笑死,一個胖子當著我的面吹牛卸例,可吹牛的內(nèi)容都是我干的称杨。 我是一名探鬼主播肌毅,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼姑原!你這毒婦竟也來了悬而?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤锭汛,失蹤者是張志新(化名)和其女友劉穎笨奠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唤殴,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡般婆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朵逝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔚袍。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖廉侧,靈堂內(nèi)的尸體忽然破棺而出页响,到底是詐尸還是另有隱情,我是刑警寧澤段誊,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布闰蚕,位于F島的核電站,受9級特大地震影響连舍,放射性物質(zhì)發(fā)生泄漏残制。R本人自食惡果不足惜唯沮,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一赡麦、第九天 我趴在偏房一處隱蔽的房頂上張望届搁。 院中可真熱鬧,春花似錦潜腻、人聲如沸埃儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽童番。三九已至,卻和暖如春威鹿,著一層夾襖步出監(jiān)牢的瞬間剃斧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工忽你, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幼东,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像根蟹,于是被迫代替她去往敵國和親脓杉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫简逮、插件丽已、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評論 4 62
  • Day3 13-6-2017 親愛的老公,閱讀了你發(fā)過來的上課筆記买决,內(nèi)容很好,不但好好學吼畏,并且真的習(執(zhí)行)出來督赤,...
    JennyMo閱讀 154評論 0 0
  • 所謂歷史,就是人物與其所背負的命運泻蚊,帝國的興盛與衰亡躲舌。對于千千萬萬已成定局的事,我們評頭論足性雄,或欣賞没卸,或鄙棄,...
    StraightSnow閱讀 786評論 0 4
  • 本篇文章介紹一種設計模式——觀察者模式秒旋。觀察者模式在Android中有著很多的應用约计,如按鈕監(jiān)聽,接口回調(diào)以及很多流...
    Ruheng閱讀 2,969評論 6 30