美文网首页
闲聊Swift中全屏Pop的实现

闲聊Swift中全屏Pop的实现

作者: 听海听心 | 来源:发表于2018-08-06 11:42 被阅读110次

    今天和大家一起来闲聊一下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..<count{
          let nameP = ivar_getName(ivars[Int(i)])!
          let name = String.init(cString: nameP)
          log("\(name)")
    }
    
    • 注意到系统手势中_targets属性


      打印截图.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的实现

          本文链接:https://www.haomeiwen.com/subject/veywvftx.html