ios 手势返回<1>
2024-09-07 11:01:34
极其简单取巧的方法
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:遵从该协议,定义了转场时需要的元数据。一般不需自己定义。
最新文章
- Log4net入门(控制台篇)
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
- ADB pm 命令
- 绕过HR破门而入的求职智慧
- sql语句的各种模糊查询
- The command &#39;new_value&#39; for SQLPlus
- C Primer Plus(第五版)5
- jquery 常见问题--转载
- MAC终端显示隐藏文件,关闭显示
- 转载:win7JDK环境配置
- 用log(N)的解法实现数值的整数次方
- deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记
- struts2_struts类型转换
- BZOJ3737 : [Pa2013]Euler
- SQL STUFF函数 拼接字符串 多列 合并成一列 转
- markdown 换行
- C#_界面程序_数码游戏
- 虚拟机配置Cognos报错CFG-ERR-0106
- 一键安装lamp环境出现的问题
- 使用BabeLua3.x在cocos2d-x中编辑和调试Lua
热门文章
- Delphi7 实现窗体全屏方法
- XCode工程内多Targets教程
- 修改weblogic端口的方法
- C# this.Invoke()的作用与用法
- asp.net使用母版页以及Jquery和prototype要注意的问题
- MySQL实现删除数据左右空格trim() 左空格ltrim() 右空格rtrim()
- Jquery.data()的值存放再什么地方的问题?
- Centos 7 联想Y430P无线网卡驱动安装 过程参考
- 斯坦福《机器学习》Lesson5感想———1、成学习算法
- CentOS6.8 安装FTP及添加用户