閑聊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..<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的實現今天聊到這里,關于使用出現的問題歡迎大家和我交流,共同進步,謝謝各位。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。