ios 手势返回<1>
极其简单取巧的方法
iOS7之后是有侧滑返回手势功能的。注意,也就是说系统已经定义了一种手势,并且给这个手势已经添加了一个触发方法(重点)。但是,系统的这个手势的触发条件是必须从屏幕左边缘开始滑动。我们取巧的方法是自己写一个支持全屏滑动的手势,而其触发方法系统已经有,没必要自己实现pop的动画,所以直接就把系统的触发处理方法作为我们自己定义的手势的处理方法。
#import "ViewController.h"
@interface ViewController ()<UIGestureRecognizerDelegate>
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
id target = self.navigationController.interactivePopGestureRecognizer.delegate;
// handleNavigationTransition:为系统私有API,即系统自带侧滑手势的回调方法,我们在自己的手势上直接用它的回调方法
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
panGesture.delegate = self; // 设置手势代理,拦截手势触发
[self.view addGestureRecognizer:panGesture];
// 一定要禁止系统自带的滑动手势
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
// 什么时候调用,每次触发手势之前都会询问下代理方法,是否触发
// 作用:拦截手势触发
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 当当前控制器是根控制器时,不可以侧滑返回,所以不能使其触发手势
if(self.navigationController.childViewControllers.count == 1)
{
return NO;
}
return YES;
}
@end
拓展
方案二涉及到了自定义转场动画的东西。关于自定义转场动画有三个核心的协议:
- UIViewControllerAnimatedTransitioning:遵从该协议的对象,即是我们自定义的动画;
- UIViewControllerInteractiveTransitioning:遵从该协议实现动画可交互性。不过一般我们直接使用系统UIPercentDrivenInteractiveTransition类,不需自定义。
- UIViewControllerContextTransitioning:遵从该协议,定义了转场时需要的元数据。一般不需自己定义。
ios 手势返回<1>的更多相关文章
- ios 手势返回<1>2
iOS-给push出来的控制器添加全局滑动(返回)手势 在iOS中,当我们push出一个新的控制器的时候,我们可以向右拖拽屏幕的左边缘来返回(pop)到上一级控制器,但是这个功能有两个缺陷: 当自 ...
- IOS控制系统手势返回
self.navigationController.interactivePopGestureRecognizer.enabled = YES; //手势返回的代理,如果自定义了leftButtonI ...
- 定义的返回按钮 Push到下一个页面后 手势返回无效解决办法
转自:http://zhangmingwei.iteye.com/blog/2080457 从iOS7的Beta版开始,就着手做兼容工作,到Beta4的時候,应用已经基本兼容,只是偶然发现,iOS样式 ...
- react-native 手势操作和 react-naviagation 组件的手势返回功能的冲突解决
上篇我们说到过在react-native触摸及手势事件 那么我在项目中遇到的问题是在react-navigation中的子页面,希望保留在ios中的效果:从左侧往右侧滑动为退出该页面. 但是希望我在滑 ...
- iOS 手势识别器概述
手势识别器 iOS 手势识别器(UIGestureRecognizer) 点击手势(UITapGestureRecognizer) 滑动手势(UISwipeGestureRecognizer) 旋转手 ...
- ios手势
iOS 手势操作:拖动.捏合.旋转.点按.长按.轻扫.自定义 大 中 小 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. i ...
- iOS手势学习UIGestureRecognizer & cocos2d 手势推荐
iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer // 长按UIPanGestur ...
- swift - 根试图控制器的手势返回冲突 - push 新的tabbar控制器手势冲突
1. 禁用手势 和开启手势 extension JYRTSShopListController: UIGestureRecognizerDelegate { /// 禁止使用手势返回 func for ...
- swift - VC添加手势返回
1.需要添加手势的界面 (1)addBackGesture() (2) 设置手势返回代理 // MARK: - 添加返回手势 extension JYRTSShopDetialConteoller:U ...
随机推荐
- Android反编译调试源码
Android反编译调试源码 1. 反编译得到源码 直接在windows 命令行下输入命令java -jar apktool_2.0.0.jar d -d 小米运动_1.4.641_1058.apk ...
- 【Linux】Linux下 环境变量/etc/profile、/etc/bashrc、~/.bashrc的区别【转】
转自:http://blog.csdn.net/qiao1245/article/details/44650929 ------------------------------------------ ...
- ElasticSearch5.5.2:Windows下ElasticSearch安装配置
环境 1.Windows10企业版X64 2.JDK-1.8 3.ElasticSearch-5.5.2 4.elasticsearch-head插件 5.node-v6.11.2-x64.msi 1 ...
- windows 10 超级优化提速 附系统服务列表纯净
如图,本机安装了vs2017 office2016 迅雷.谷歌浏览器,不建议安装其它任何软件.vs2017为开发软件,用于编程,一般用户用不到. 如果想安装其它的软件,建议优先使用绿色版本的. 下载服 ...
- Android无数据线调试方法
平时在Android设备上调试程序.通常是将Android设备用数据线和PC机相连. 可是,在没有数据线的情况下也能够: 1.将PC机和Android设备连到同一网段. 2.获取Android设备的I ...
- jQuery 技术揭秘
1.平时jquery调用页: index.html : <!DOCTYPE html> <html lang="en"> <head> < ...
- Nginx:HTTP框架是如何介入请求
参考资料 <深入理解Nginx>(陶辉) Nginx事件模块博客地址:http://www.cnblogs.com/runnyu/p/4914698.html Nginx是一个事件驱动构架 ...
- 【VBA】获取Excle的安装路径
在VBA中,如何获取Excle的安装路径呢?请看以下代码: Sub 获取Excle的安装路径() MsgBox "Excle的安装路径为:" & Application.P ...
- JUnit编写单元测试代码注意点小结
用eclipse编写单元测试的时候,可以直接选中某个类,然后右键new新疆一个junit case,界面如下图1所示: 图1:新建test case 选 择图1中的JUnit Test Case,然后 ...
- linux本地文件上传之RZ/SZ和sftp
将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令. 1.软件安装 (1)编译安装 root 账号登陆后, ...