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);
}
相關文章
- iOS 側滑返回手勢與Scrollview衝突的解決辦法iOSView
- Flutter和iOS手勢衝突解決思路FlutteriOS
- UIPanGestureRecognizer進行檢視滑動並處理手勢衝突UI
- iOS 開發中遇到的手勢衝突iOS
- 解決右滑返回手勢和UIScrollView中的手勢衝突UIView
- ScrollView 與ListView 滑動衝突解決View
- kotlin語言:解決drawerLayout與viewpager的衝突、NavigationView側滑裡面menu的點選事件KotlinViewpagerNavigation事件
- iOS開發UI篇--一個側滑選單SlidingMenuiOSUI
- 聊聊Flutter中的常見滑動手勢衝突Flutter
- Maven Idea檢視解決jar包衝突MavenIdeaJAR
- Android事件分發機制、滑動衝突解決Android事件
- 短視訊平臺開發,依靠DrawerLayout實現側滑選單效果
- android父子控制元件手勢衝突的解決Android控制元件
- (有圖)仿QQ側滑選單:RecyclerView側滑選單,長按拖拽,滑動刪除View
- Android View 滑動衝突解決方式以及原理AndroidView
- 一種巢狀滑動衝突的解決方案巢狀
- 巢狀UIScrollview的滑動衝突解決方案巢狀UIView
- RecyclerView與下拉重新整理控制元件滑動衝突的解決View控制元件
- 【只發精品】匠心打造Vue側滑選單元件Vue元件
- 一種非巢狀滑動衝突的解決方案巢狀
- Android側滑選單DrawerLayout使用Android
- Swift - 仿寫QQ側滑選單Swift
- 帶有視覺滾動差的選單側滑欄視覺
- Git 解決衝突Git
- git 解決衝突Git
- UITapGestureRecognizer與didSelectRowAtIndexPath衝突解決UIIndex
- iOS實現簡單的抽屜式側欄——MMDrawerController的使用iOSController
- Elasticsearch——併發衝突以及解決方案Elasticsearch
- 【Objective-C】解決輕拍手勢事件與TableView的Cell點選事件衝突的問題Object事件View
- 自定義View:側滑選單實現View
- iOS開發-手勢iOS
- 短視訊軟體開發,按鈕側滑顯示各個選項
- 程式衝突及其解決
- git pull 衝突解決Git
- windows解決埠衝突Windows
- IP衝突解決方案
- SVN 版本衝突解決
- hash衝突解決方法