runtime+KVC实现全屏滑动移除控制器
bigegpt 2024-10-16 07:58 67 浏览
1.首先你要了解什么是runtime
答: runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API.
在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者
举例: OC : [[YJPerson alloc] init]
runtime : objc_msgSend(objc_msgSend(“YJPerson” , “alloc”), “init”)
好了关于runtime的更深了解,你可以参考官方文档,或者网上搜索
2.接下来进入今天的主题今天讲解一下runtime配合KVC来修改系统的内部的一些东西,那能修改什么东西呢
比如说让系统滑动移除控制器
修改系统的tabBar
修改系统的pageController 的显示图片等等
3.这次真的要进入今天的主题了
4.今天的目的是
实现全屏滑动
,要实现全屏滑动有2种方法
4.1 第一种,修改系统的手势,如果系统有提供全屏滑动的方法,就直接修改
4.2 第二种,如果系统没有提供,自己创造条件也要实现
系统的滑动手势其实是这个,自定义NavController
4.1 先采用第一种,看看系统里面有没有提供全屏滑动的手势
打印这个属性得知, interactivePopGestureRecognizer
的真实类型是UIScreenEdgePanGestureRecognizer
具体请看
然后我们要进入头文件看一下有没有提供这个属性
接着我们进去看一下这个属性提供的有哪些值
其实细心的朋友就发现了,并没有我们要的值,我们要的是全屏,什么叫全屏,有的朋友说上下左右不是全屏吗? 其实不是,因为还有中间呢?
这个值默认是左侧,也就是我们经常用的从左侧边缘滑动移除控制器,如果不信,你可以打开你的iPhone的设置界面,随便push一个控制器,然后从左侧边缘按住屏幕往右滑,这个就是左侧滑动移除控制器,有的朋友说你为什么不让打开应用呢,因为现在有的应用把这个功能取消了,这个功能是在iOS7之后才有的
第一种方案pass掉了
4.2 没有条件我们创造条件也要实现,这是程序员的一种正常思维
系统不是不提供吗,我们也不能修改,所以我们要创造条件,怎么创造条件呢,其实滑动说白了就是手势,那我们就添加一个手势
代码如下:
其实写到这里我们又遇到了一个问题,什么问题呢,就是调用当前对象的
panGes :
方法,那么这个条件是什么呢,有的朋友说当屏幕滑动到小于一般让他复位,当屏幕滑动大于一半,让他移除,等等,其实你考虑的不够全面,因为他还夹杂着速度等等一些条件,我们在之前将UI进阶的时候讲过用2个view,或者3个view来实现,记得当时用了3节课才讲完,这个如果要手动实现,困难度要比2个view或者3个view难多了,用一天估计也讲不完.那最终方案是什么呢?其实这个时候我们要看一下我们缺什么?其实自己添加手势无非是缺Target和action,也就是调用哪个对象的哪个方法, action,我们想一下系统既然能实现,那说明系统内部是有这个方法的,那我们是不是直接拿过来用就可以了,想到这里我们再回去看一下在一开始打印的信息
你有没有发现
action=handleNavigationTransition:
到此我们的action是有了,那现在唯一缺的就是Target那么Target怎么获取,这个时候我们就想到用KVC取出来通过
但是用KVC的前提条件是必须知道这个属性的真实类型,才能取出,很显然现在我们是不知道的,所以接下来我们的终极目的就是得到target的真实属性,那么怎么才能得到呢,接下来军哥就要放大招了,那就是runtime
首先你要用runtime必须先导入这个函数库
#import <objc/runtime.h>
有的朋友不知道什么是函数库,其实你稍微有一点点OC编程经验的就知道,函数库其实就是封装了好多方法供你调用,其实他也没有什么牛xx之处
5.要获取某一个类下面的所有成员属性,可以用这个方法,这里说明一下这个方法class_copyIvarList,只能获取某一个类下面的成员属性,也就是不能获取他的子类,或者父类的成员属性,所以我们必须要获取他爷爷类下面的成员属性,因为根据推测,target在UIPanGestureRecognizer这个类下面,因为
6.接下来就开始遍历,因为有数组,有索引,所以我们就开始遍历
7.打印输出的成员属性
8.接下来我们开始验证一下
打印输出
如果做过后台的朋友就知道,看到()代表是数组,所以他返回的仍然是数组,其实也很好理解,为什么呢,因为假如你添加了很多手势,所有的target都在这个下面
9.把数组去掉
去掉数组打印如下
10.去掉数组你会发现,还是不能确定target的真实类型,所以这个时候军哥要放大招了,打断点来确认真实属性
11.到此全屏滑动搞定,完整代码如下
ps: #pragma clang diagnostic push是为了消除警告
具体可以参照我的另一篇文章iOS消除警告
12.因为官方文档明确说明了跟控制器不能出栈,所以当你滑动到跟控制器的是需要禁止手势,如果你不禁止就会出现卡死的现象,bug很严重
具体代码如下:
到此大功告成,小伙伴们,可以去试一下。
更多资讯更多伙伴,尽在bbs.520it.com。
相关推荐
- 一条命令搞定pip国内镜像源设置(pip install 指定镜像)
-
玩python的同学想必没有不用pip的吧,pip是python包管理工具,和Nodejs的npm、Java的maven类似,这些依靠开源力量建立起的庞大软件库极大提高了开发的效率,不过默认pytho...
- Cadence Allegro在PCB中手动或者自动添加差分对属性
-
设计PCB过程中,若设计中有差分对信号,则需要将是差分的2个信号设置为差分对,设置差分对有2种方式:手动添加及自动添加一、手动添加差分对:1、点击Setup-Constraints-Constrain...
- 合亿 Gutab 三防|车载工业平板功能介绍,车载工业平板厂家推荐
-
在商用车队管理迈向智能化、特种车辆作业追求高效化的今天,车载工业平板早已突破传统“车载导航”的单一功能,成为连接车辆、司机与云端管理的核心枢纽。从物流运输的实时调度中枢,到矿山开采的无人驾驶控制器,再...
- 「探长分享-黑匣子」本田冠道 2020款
-
【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】本田冠道2020款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步标...
- 「探长分享-黑匣子」奥迪A6L 2019款
-
【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】奥迪A6L2019款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步...
- 探长360全景案例分享:奥迪Q7 2011款360全景效果展示
-
【品牌】DCT360汽车黑匣子【产品型号】3TPro【安装车型】奥迪Q72011款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停...
- 「探长分享-黑匣子」保时捷Cayenne 2015款
-
【品牌】探长360汽车黑匣子【产品型号】4TPro【安装车型】保时捷Cayenne2015款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,...
- 苍蝇再小也是肉,变态电路的大阳巧客S2差点难死大神
-
这台大阳巧客S2电动四轮车是我家第二台四轮俱全的篷车!哈哈!大阳巧客S2配置4.5Kw永磁同步电机,SVPWM矢量控制正弦波系统,车辆在加速、爬坡上性能有提升,效率高,操控灵敏。这台车前段时间刚更换了...
- 「探长分享-黑匣子」奥迪Q5L 2020款
-
360汽车黑匣子【产品型号】4TPro【安装车型】奥迪Q5L2020款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停车监控,一秒一...
- 「探长分享-黑匣子」丰田兰德酷路泽 2016款
-
【品牌】探长360汽车黑匣子【产品型号】3TPro【安装车型】丰田兰德酷路泽2016款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小...
- 驾驶室盲区是酿成重卡事故主因?后视系统:这个锅我不背
-
小时候家中长辈常常提醒:离大货车远一点!司机根本看不到你!早期的货车可能真的存在驾驶盲区,比如车辆正下方,因驾驶座过高,恰好是司机看不到的视野盲区。而如今的重卡在环视系统上已经非常完善,是否还存在驾驶...
- 前后双录,360 G580行车记录仪(360行车记录仪g580s)
-
相信每一位车主都会为爱车安装行车记录仪,行车记录仪的作用不仅能为交通事故还原证据,还能防止碰瓷。传统的单镜头行车记录仪只能拍摄车头方向的行车画面,如果遇到后方车辆故意碰瓷的事故时,没有监控和后摄画面则...
- 海康威视同轴录像机怎么使用,海康XVR配置说明
-
海康威视同轴录像机支持模拟、同轴以及数字IP摄像机接入,因此在使用多种类型摄像机、老久监控项目改造等场景广泛使用。首先,新录像机第一次使用需要设置管理密码激活,密码需由8-16位数字、小写字母、大写...
- 亿道三防2代工业级车载平板电脑震撼登场,农机矿车专用
-
亿道三防近日推出2024年全新2代车载平板电脑V12R,引领多项技术创新和升级,为农机、矿车等车载领域带来了超越期待与想象的震撼体验。V12R是一款从里到外,性能、功能全线拉满的工业级车载平板电脑!拥...
- 分析神州十八号返回舱内的摄像机最有可能是什么类型的摄像头
-
有没有发现,神州十八号返回舱内摄像机的图像虽然清晰度不是很高,但是画面非常干净,没有一点干扰,几乎看不到噪点。图像清晰度不高不太可能是镜头原因,很可能是图像传感器的分辨率比较低的原因,图像传感器分辨率...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)