iOS開發之解決MMDrawerController側滑選單與中心檢視手勢衝突
MMDrawerController 是一個很好用的實現抽屜效果的第三方類,但有時候當我們在中心檢視的子檢視控制器中需要使用手勢進行其他操作的時候會產生手勢衝突,導致執行效果不符合我們的想象。那麼問題來了,該怎麼解決衝突問題呢?
下面是我在使用過程中的個人總結:
需求:
1、只有左抽屜和中心檢視控制器,在中心檢視的子檢視控制器右滑可以開啟左抽屜。
2、中心檢視的子檢視控制器中的 Cell 可通過滑動手勢顯示自定義 Cell 中的刪除按鈕
問題:
1、由於刪除 Cell 的左滑手勢和 MMDrawerController 的開啟右抽屜的左滑手勢有衝突,導致左滑顯示自定義 Cell 刪除按鈕的方法不響應。
期待效果:
1、解除刪除 Cell 的手勢衝突
2、右滑可以開啟左抽屜
思考過程:
MMDrawerController 中應該有一個識別手勢的方法,只要找到這個方法問題就可以得到解決。
解決過程:
1、在 MMDrawerController 資料夾下的各個.m
檔案中通過 Command+F 搜尋 GestureRecognizer,最終在 MMDrawerController 這個類中找到這個方法
-(MMOpenDrawerGestureMode)possibleOpenGestureModesForGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer withTouch:(UITouch*)touch;
2、在這個方法中找到了 PointContainedWithinCenterViewContentRect:
這個判斷條件,按住 Command 點選後跳到它所在的位置,在這裡找到了問題所在。解決方式如下:
MMDrawerController.m 1443 行
-(BOOL)isPointContainedWithinCenterViewContentRect:(CGPoint)point{
// CGRect centerViewContentRect = self.centerContainerView.frame;
// 原文意思是把觸發抽屜的手勢識別放在整個螢幕中
CGRect centerViewContentRect = CGRectMake(0, 0, 50, self.centerContainerView.frame.size.height);
// 修改後的意思是把觸發開啟抽屜手勢識別放在螢幕左側寬50,高為螢幕高度的 rect 中
centerViewContentRect = CGRectIntersection(centerViewContentRect,self.childControllerContainerView.bounds);
return (CGRectContainsPoint(centerViewContentRect, point) && [self isPointContainedWithinNavigationRect:point] == NO);
}
相關文章
- Flutter和iOS手勢衝突解決思路FlutteriOS
- iOS 開發中遇到的手勢衝突iOS
- iOS開發UI篇--一個側滑選單SlidingMenuiOSUI
- kotlin語言:解決drawerLayout與viewpager的衝突、NavigationView側滑裡面menu的點選事件KotlinViewpagerNavigation事件
- Maven Idea檢視解決jar包衝突MavenIdeaJAR
- 聊聊Flutter中的常見滑動手勢衝突Flutter
- 短視訊平臺開發,依靠DrawerLayout實現側滑選單效果
- Android View 滑動衝突解決方式以及原理AndroidView
- 一種巢狀滑動衝突的解決方案巢狀
- 一種非巢狀滑動衝突的解決方案巢狀
- Git 解決衝突Git
- git 解決衝突Git
- 【朝花夕拾】Android自定義View篇之(七)Android事件分發機制(下)解決滑動衝突AndroidView事件
- 原生Android 側滑選單實踐(部分)Android
- Elasticsearch——併發衝突以及解決方案Elasticsearch
- iOS 如何絲滑的側滑返回iOS
- iOS開發-手勢iOS
- Git衝突解決技巧Git
- hash衝突解決方法
- 程式衝突及其解決
- git pull 衝突解決Git
- 建立結算清單時提示衝突解決方案
- 短視訊軟體開發,按鈕側滑顯示各個選項
- iOS開發-檢視與檢視控制器生命週期iOS
- 【Flutter】修改flutter_boost,相容iOS側滑的一個解決方案FlutteriOS
- RecyclerView 、ViewPager 左右滑動衝突Viewpager
- 【Flutter 專題】130 圖解 DraggableScrollableSheet 可手勢滑動的選單欄Flutter圖解
- SVN解決衝突 記錄
- css命名衝突解決方法CSS
- css3實現側邊滑動選單CSSS3
- PtrClassicFrameLayout與viewpager橫向滑動衝突的問題Viewpager
- Flutter | 超簡單仿微信QQ側滑選單元件Flutter元件
- javamelody與swagger註解衝突JavaSwagger
- 解決 Laravel {{ }}與前端 VIM 模版引擎標記 衝突Laravel前端
- git pull衝突的解決方案Git
- JAR衝突問題的解決JAR
- git 解決版本衝突問題Git
- 利用DrawerLayout實現側滑選單學習總結