- 以下在導(dǎo)航控制器的子控制器中實(shí)現(xiàn)的代碼
//0.1 獲取系統(tǒng)target對(duì)象
let _sysTarget = self.navigationController?.interactivePopGestureRecognizer?.delegate
//0.2 給當(dāng)前View添加滑動(dòng)手勢(shì)
//0.2.1 "handleNavigationTransition:"
是存在于_sysTarget中的方法,導(dǎo)航控制器側(cè)滑返回就是調(diào)用該方法
let _newGesture = UIPanGestureRecognizer.init(target: _sysTarget, action:Selector("handleNavigationTransition:"))
self.view.addGestureRecognizer(_newGesture)
//0.3 禁用系統(tǒng)自帶的邊緣側(cè)滑手勢(shì)
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
//0.4 以上全屏滑動(dòng)返回功能已經(jīng)實(shí)現(xiàn)了,但還有一個(gè)細(xì)節(jié)
//需要在導(dǎo)航控制器中的根控制器中設(shè)置手勢(shì)代理,攔截手勢(shì)觸發(fā),因?yàn)楦刂破饕呀?jīng)沒(méi)有可以再返回的View。而再觸發(fā)會(huì)卡屏
_newGesture.delegate = self
//0.5 遵守協(xié)議實(shí)現(xiàn)代理
//返回 False 相當(dāng)于禁用手勢(shì)
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if self.navigationController?.viewControllers.count == 1{
return false
}
return true
}
n_n