Swift - 导航控制器自带侧滑返回功能自定义为全屏滑动返回效果

- 以下在导航控制器的子控制器中实现的代码

//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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容