利用UIPanGestureRecognizer手势全屏侧滑返回

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53504356

在iOS开发中如果我们利用的navigationController(几乎每个项目都有吧!),当从根控制器跳转到下一个控制器再从下一个控制器返回的时候苹果为我们自带了侧滑返回的手势,但有两点需要注意:

注意点一:如果我们自定义了返回按钮那么苹果自带的侧滑返回手势会失效(现在App的返回按钮几乎都是自定义,没有像苹果自带App那样返回按钮都是自带的)。

注意点二:如果再根视图控制器也进行侧滑,那么程序会出现问题,无法再跳转到下一页。

要想避免上述两个注意点中的问题,我们需要自定义NavigationController,并在NavigationController中做些操作:

在viewDidLoad方法中:

self.delegate = self;

_popDelegate = self.interactivePopGestureRecognizer.delegate;

并且实现协议中的方法:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

{

if (viewController == self.viewControllers[0] ) {   // 如果显示的是根视图控制器

self.interactivePopGestureRecognizer.delegate = _popDelegate;

    } else

    {

self.interactivePopGestureRecognizer.delegate = nil;

    }

}

遵守的协议是:

UINavigationControllerDelegate

做了如上操作之后我们就可以顺利使用侧滑返回,但这样的侧滑是系统自带的只能侧滑屏幕左侧。本次博客的题目是利用UIPanGestureRecognizer手势全屏侧滑返回,我们要想实现全屏侧滑返回,就要添加UIPanGestureRecognizer这个手势,并且禁用系统自带侧滑手势。同样是在自定义的NavigationController中进行操作。

- (void)viewDidLoad {

    [super viewDidLoad];

// Do any additional setup after loading the view.

// 添加手势

UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];

    pan.delegate = self;

    [self.view addGestureRecognizer:pan];

// 系统自带手势失效

self.interactivePopGestureRecognizer.enabled = NO;

}

#pragma mark --- UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

// 如果不是根视图控制器就让侧滑手势有效,否则失效

if (self.childViewControllers.count > 1) {

return YES;

    }else{

return NO;

    }

}

同样如果是根视图控制器返回手势失效.

本次博客到此结束,谢谢阅读!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android填坑指南

Android设备屏幕方向的一二事

orientation的取值为: - 横屏:Configuration.ORIENTATION_LANDSCAPE - 竖屏:Configuration.O...

62928
来自专栏张高兴的博客

张高兴的 Xamarin.Android 学习笔记:(二)“Hello World”

3644
来自专栏yang0range

Android性能优化概述

对于Android的性能优化,想必大家并不陌生,但是没有真正的总结一下,在此我根据自己平时开发,在结合一些读书笔记,对Android的性能优化,进行一些总结。 ...

1193
来自专栏我就是马云飞

ViewGroup源码解读

我们之前刚刚分析完事件传递机制和view的源码,如果没有看过的,建议看完View的事件拦截机制浅析以及View的事件源码解析。这次我们来分析下viewgroup...

1958
来自专栏iOS开发攻城狮的集散地

iOS app国际化 、跳转到系统设置、iOS10通知、正则表达式

1694
来自专栏Golang语言社区

Golang语言社区--go语言执行cmd命令关机、重启等

大家好,我是Golang语言社区主编彬哥,这篇给大家带来关于Go语言操作cmd命令执行windows平台的相关操作

77119
来自专栏游戏杂谈

as3加载外部资源

在as3的开发中,经常会加载外部共用资源,比如某一个公用的图片或者其它小特效。这时候为了避免重复请求,一般会将这些资源放在一个fla文件中,为每一个资源添加链接...

884
来自专栏GuZhenYin

C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)

前言 上篇文章地址: C#开发移动应用系列(1.环境搭建) C#开发移动应用系列(2.使用WebView搭建WebApp应用) 今天我们来讲一下如何使用Came...

2455
来自专栏郭霖

Android Volley完全解析(二),使用Volley加载网络图片

在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法。本篇文章中我们即将学习关于Volley更加高级的用法,如何你还没有看过我的上一篇文章的话,建...

2616
来自专栏IMWeb前端团队

可能是史上最全的weex踩坑攻略

> 这是一篇有故事的文章 --- 来自一个weex在生产环境中相爱相杀的小码畜.. ? 故事一: Build 虽然weex的口号是一次撰写 多端运行, 但其实b...

1.9K10

扫码关注云+社区

领取腾讯云代金券