闲聊Swift中全屏Pop的实现

今天和大家一起来闲聊一下Swift全屏pop的实现,有疏忽的地方,还望各位不吝赐教。


一、全屏Pop的实现方式

  • 第三方 :FDFullscreenPopGesture,这里就不在赘述了。
  • KVC实现 :因为苹果本身就已经带有左边缘的Pop,所以我们要做的就是想办法把系统的手势给取出来,加到当前的View上。

二、KVC实现代码

1、先使用RunTime打印系统手势中所有的属性,找到taget和action就好办了。

这里是关于RunTime的介绍和简单实用

var count : UInt32 = 0
let ivars = class_copyIvarList(UIGestureRecognizer.self, &count)!

for i in 0..
  • 注意到系统手势中_targets属性


    闲聊Swift中全屏Pop的实现_第1张图片
    打印截图.png

2、通过KVC进行添加手势的操作

  • 首先先自定义一个UINavigationController,重写系统viewDidLoad()方法
override func viewDidLoad() {
        super.viewDidLoad()
        // 判断_targets中是否有值
        guard let targets = interactivePopGestureRecognizer!.value(forKey: "_targets") as? [NSObject]  else {
            return
        }
        // 去除targets中第一个元素,这里大家可以打印一下看一看targets和第一个元素中的数据
        let targetObj = targets[0]
        // 通过KVC拿到target
        let target = targetObj.value(forKey: "target")
        // 通过字典无法拿到action,这里通过Selector方法包装action
        let action = Selector.init(("handleNavigationTransition:"))
        // 创建UIPanGestureRecognizer(平移手势识别器)
        let panGes = UIPanGestureRecognizer.init(target: target, action: action)
        // 将创建的手势加到当前的View上
        view.addGestureRecognizer(panGes)
}
  • 小福利:这里把hidesBottomBarWhenPushed也封装到自定义的UINavigationController,以后Push想要隐藏Tabbar也不用再写.hidesBottomBarWhenPushed了
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // 必须先隐藏tabBar,再调super 
        viewController.hidesBottomBarWhenPushed = true
        super.pushViewController(viewController, animated: true)
}

写在最后的话:关于Swift全屏pop的实现今天聊到这里,关于使用出现的问题欢迎大家和我交流,共同进步,谢谢各位。

你可能感兴趣的:(闲聊Swift中全屏Pop的实现)