現(xiàn)在眾多APP中都有全屏pop手勢
實現(xiàn)這個目前只想到兩種方式末盔,如有其他方式請留言告知邢隧,相互學(xué)習(xí)
第一種
根據(jù)需求呐能,我們大部分會第一時間想到,在Controller的View中添加手勢尚揣,然后根據(jù)側(cè)滑動作涌矢,添加pop當(dāng)前頁面的方法
(但是這種方式實現(xiàn)起來相對麻煩,并且不太好處理)
第二種
根據(jù)iOS運(yùn)行時的特性惑艇,把原本左側(cè)邊側(cè)滑pop事件蒿辙,添加到View中,來實現(xiàn)全局pop
(此方式實現(xiàn)較容易滨巴,所以選擇第二種方式)
具體實現(xiàn)
1.創(chuàng)建自定義UINavigationController
2.獲取手勢及view
//獲取系統(tǒng)手勢
guard let systemGes = interactivePopGestureRecognizer else {
return
}
//獲取手勢添加到view中
guard let gesView = systemGes.view else {
return
}
3.獲取屬性名稱
//獲取target/action
//利用運(yùn)行時機(jī)制獲取所有屬性名稱
/*
var count : UInt32 = 0
let ivars = class_copyIvarList(UIGestureRecognizer.self, &count)!
for i in 0..<count{
let ivar = ivars[Int(i)]
let name = ivar_getName(ivar)
print(String(cString : name!))
}
*/
4.根據(jù)屬性獲取target與action
let targets = systemGes.value(forKey: "_targets") as? [NSObject]
guard let tagetObjc = targets?.first else {
return
}
print(tagetObjc)
//取出action
guard let target = tagetObjc.value(forKey: "target") else {
return
}
let action = Selector(("handleNavigationTransition:"))
其中print(tagetObjc)
是
(action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7f92e3f16b20>)
5.創(chuàng)建自己的手勢
let panGes = UIPanGestureRecognizer()
gesView.addGestureRecognizer(panGes)
panGes.addTarget(target, action: action)
這樣就完成全局的pop手勢了