OC实现手势滑动控制viewCotroller 返回功能
先上效果图

github地址
https://github.com/kingundertree/pushBackDemo
主要功能
- 支持iOS5~8,滑动viewController,实现页面返回
- 支持背景缩放和视差平滑2种模式
- 支持单个页面和多个页面pop,支持页面返回后通知
- 单个viewController禁用手势
设计思路
- 继承UINavgationController,继承pushViewController方法。push的时候,依次调用[self capture],截取上一个viewController并保存
- UINavgationController的view上add GestureRecognizer,监听手势动作
- 手指右滑开始,将最新截图insertSubview: belowSubview:到当前view,并通过滑动距离,控制belowSubview的效果
- popViewControllerAnimated或者popToViewController: animated:后,移除对应的截图
使用方法
1.继承PushBackNavgationController
PushBackNavigationController *nav = [[PushBackNavigationController alloc] initWithRootViewController:MVC];
self.window.rootViewController = nav;
2.设置手势滑动效果,支持背景缩放和平滑
typedef enum {
CaptureTypeWithView = 0,
CaptureTypeWithWindow
}CaptureType; //截图区域选择
3.禁用某个页面手势
在需要控制的viewController,引入pushBackLock
[pushBackLock setDisableGestureForBack:self.navgationgationController disable:YES]
如果禁用所有手势,则不继承PushBackNavgationController即可
拦截iOS7 滑动返回手势
效果图
见iOS7 系统自带原生手势滑动返回,但是控制区域在左侧10px位置,本demo支持viewController全部区域
github地址
https://github.com/kingundertree/ExtensionNavGesForiOS7
主要功能
- 模拟iOS手势滑动返回效果
- 只支持iOS7 及以上版本
- 此方法比较简单,而且系统提供的手势滑动效果更加细腻。但是采用NSRunloop截取系统事件,使用需谨慎。
实现思路
- iOS7 开始,系统提供手势滑动返回功能,但是操作区域有限
- 设法截取系统手势事件,UINavgationController的interactivePopGestureRecognizer
- 自定义UIPanGestureRecognizer并add到UINavgationController的view上
- 截取interactivePopGestureRecognizer的target和action
- 把interactivePopGestureRecognizer的target和action,赋给自定义的手势上即可
使用方法
- 继承ExtensionNav即可
NavigationInteractiveTransition 实现iOS7系统手势返回效果
效果图
见iOS7 系统自带原生手势滑动返回,但是控制区域在左侧10px位置,本demo支持viewController全部区域
github地址
https://github.com/kingundertree/TransitionPopForiOS7-
主要功能
- 模拟iOS手势滑动返回效果
- 只支持iOS7 及以上版本
实现思路
- 设法截取系统手势事件,UINavgationController的interactivePopGestureRecognizer
- 通过ISO7提供的转场动画事件NavigationInteractiveTransition,创建新的action
- 在action中计算progress,分别实现updateInteractiveTransition、finishInteractiveTransition、cancelInteractiveTransition事件即可
使用方法
- 继承ExtensionNav即可
swift 语言实现手势滑动返回效果
github地址
效果同上,采用swift语言重新实现。