- 以下在导航控制器的子控制器中实现的代码
//0.1 获取系统target对象
let _sysTarget = self.navigationController?.interactivePopGestureRecognizer?.delegate
//0.2 给当前View添加滑动手势
//0.2.1 "handleNavigationTransition:"
是存在于_sysTarget中的方法,导航控制器侧滑返回就是调用该方法
let _newGesture = UIPanGestureRecognizer.init(target: _sysTarget, action:Selector("handleNavigationTransition:"))
self.view.addGestureRecognizer(_newGesture)
//0.3 禁用系统自带的边缘侧滑手势
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
//0.4 以上全屏滑动返回功能已经实现了,但还有一个细节
//需要在导航控制器中的根控制器中设置手势代理,拦截手势触发,因为根控制器已经没有可以再返回的View。而再触发会卡屏
_newGesture.delegate = self
//0.5 遵守协议实现代理
//返回 False 相当于禁用手势
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if self.navigationController?.viewControllers.count == 1{
return false
}
return true
}
n_n