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); }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
9.kotlin安卓实践课程-用kotlin写第一个fragment的recyclerView的adapter具体实现
简介 主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。 针对人群:Android中级以上,kotlin入门 本系列最后一篇我们看看recyclerView的adapter怎么实现的 首先先看一下代码 /** * Created by bigman on 18-05-18. */ class AndroidAdapter(private val mList: List<AndroidBean>) :BaseBindingAdapter<ItemAndroidBinding>() { override fun getItemCount(): Int { return mList.size } override fun onBindViewHolder(holder: ...
- 下一篇
约束布局(ConstraintLayout)1.1.2 版本的新特性
ConstraintLayout 是目前 Android Studio 中项目的默认布局,目前已经到了 1.1.2 版本,这里就来介绍下它在新版本中的特性,如果你目前还没有使用过 ConstraintLayout ,可以看下我写的另一篇文章:Android ConstraintLayout 使用详解 一、Circular Positioning 圆形定位用于将两个 View 以角度和距离这两个维度来进行定位,以两个 View 的中心点作为定位点 app:layout_constraintCircle -目标 View 的 ID app:layout_constraintCircleAngle -对齐的角度 app:layout_constraintCircleRadius -与目标 View 之间的距离(顺时针方向,0~360度) <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.andro...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块