0行代码搞定全屏侧滑返回
前段时间想弄全屏侧滑返回效果,此效果可能还是比较常用,最后在Github上看到FDFullscreenPopGesture,是在博文 的基础上扩展。仔细看了一下分析问题的思路,受益匪浅。可以看看博文的思路。
效果图:
实现代码如下:
7句代码即实现了神奇的功能,哈哈。
下面进入主题,说一下我遇到的一个坑(可能是我自己的经验不足,但还是分享一下下)
看上面的代码是下导航控制器里面写的,想一下,如果项目中有许多的导航控制器那么岂不是要写许多的这样的代码,是否可以在一个地方配置一下就好了呢?肯定想到了 runtime来实现,必须的嘛!
思路是使用runtime对导航控制器进行操作。
代码如下:(此实现是错误的,会崩溃(⊙o⊙)哦)
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BMViewController bm_viewDidLoad]: unrecognized selector sent to instance 0x7fa64bc1c920'
找不到 BMViewController 对象找不到 bm_viewDidLoad 方法!
代码中的问题是: UINavigationController的viewDidLoad 和 UINavigationController在次分类的 bm_viewDidLoad 交换,实际上 UINavigationController 的 viewDidLoad 方法是在UIViewController继承过来的,此处交换以后,UIViewController在调viewDidLoad时调到bm_viewDidLoad,但是UIViewController没有bm_viewDidLoad方法,所以崩溃。
参考1.http://blog.leichunfeng.com/blog/2015/06/14/objective-c-method-swizzling-best-practice/
修改后的oc代码:
正确代码实现
swift代码