閑聊Swift中全屏Pop的實現(xiàn)

今天和大家一起來閑聊一下Swift全屏pop的實現(xiàn),有疏忽的地方,還望各位不吝賜教。


一、全屏Pop的實現(xiàn)方式

  • 第三方 :FDFullscreenPopGesture,這里就不在贅述了。
  • KVC實現(xiàn) :因為蘋果本身就已經(jīng)帶有左邊緣的Pop,所以我們要做的就是想辦法把系統(tǒng)的手勢給取出來,加到當(dāng)前的View上。

二、KVC實現(xiàn)代碼

1、先使用RunTime打印系統(tǒng)手勢中所有的屬性,找到taget和action就好辦了。

這里是關(guān)于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)")
}
  • 注意到系統(tǒng)手勢中_targets屬性


    打印截圖.png

2、通過KVC進行添加手勢的操作

  • 首先先自定義一個UINavigationController,重寫系統(tǒng)viewDidLoad()方法
override func viewDidLoad() {
        super.viewDidLoad()
        // 判斷_targets中是否有值
        guard let targets = interactivePopGestureRecognizer!.value(forKey: "_targets") as? [NSObject]  else {
            return
        }
        // 去除targets中第一個元素,這里大家可以打印一下看一看targets和第一個元素中的數(shù)據(jù)
        let targetObj = targets[0]
        // 通過KVC拿到target
        let target = targetObj.value(forKey: "target")
        // 通過字典無法拿到action,這里通過Selector方法包裝action
        let action = Selector.init(("handleNavigationTransition:"))
        // 創(chuàng)建UIPanGestureRecognizer(平移手勢識別器)
        let panGes = UIPanGestureRecognizer.init(target: target, action: action)
        // 將創(chuàng)建的手勢加到當(dāng)前的View上
        view.addGestureRecognizer(panGes)
}
  • 小福利:這里把hidesBottomBarWhenPushed也封裝到自定義的UINavigationController,以后Push想要隱藏Tabbar也不用再寫.hidesBottomBarWhenPushed了
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // 必須先隱藏tabBar,再調(diào)super 
        viewController.hidesBottomBarWhenPushed = true
        super.pushViewController(viewController, animated: true)
}

寫在最后的話:關(guān)于Swift全屏pop的實現(xiàn)今天聊到這里,關(guān)于使用出現(xiàn)的問題歡迎大家和我交流,共同進步,謝謝各位。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容