以前随手写过一篇《使用UIScreenEdgePanGestureRecognizer实现swipe to pop效果》,挺粗糙的。html
如今使用默认模板建立的iOS App都支持手势返回功能,若是导航栏的返回按钮是自定义的那么则会失效,也能够参考这里手动设置无效。ios
[cpp] view plain copyapp
若是是由于自定义导航按钮而致使手势返回失效,那么能够在NavigationController的viewDidLoad函数中添加以下代码:函数
[cpp] view plain copy动画
这样写了之后就能够经过手势滑动返回上一层了,可是若是在push过程当中触发手势滑动返回,会致使导航栏崩溃(从日志中能够看出)。针对这个问题,咱们须要在pop过程禁用手势滑动返回功能:ui
[cpp] view plain copyspa
[cpp] view plain copy.net
除了使用系统默认的动画,还可使用自定义过渡动画(丰满的文档):代理
[cpp] view plain copy日志
以下这个代理方法是用来提供一个非交互式的过渡动画的:
[cpp] view plain copy
而下面这个代理方法则是提供交互式动画:
[cpp] view plain copy
这两个组合起来使用。首先,咱们须要有个动画:
[cpp] view plain copy
[cpp] view plain copy
其次,交互式动画是经过
[cpp] view plain copy
来维护的,在滑动过程当中根据滑动距离来进行更新:
[cpp] view plain copy
当手势结束时要作出收尾动做:
[cpp] view plain copy
一样地,自定义的动画也会有上面提到的导航栏崩溃问题,也能够经过相似的方法来解决:
[cpp] view plain copy
补充:位于当前navgationController的第一个([0])viewController时须要设置手势代理,不响应。