iOS自定义NavigationBar后如何实现全屏右滑返回

原创 2015年11月19日 17:45:03

本文是在广州小码哥高级导师吖了个峥的文章《8行代码教你搞定导航控制器全屏滑动返回效果》的基础上进行了修改后的成果。原文链接附上:http://www.cocoachina.com/ios/20150811/12897.html

原文中的实现效果在某些情况下会出现一些Bug,例如只要手指在屏幕上滑动就会默认启用滑动返回效果,同时,在配合iOS原生导航栏时可可能出现各种错误,所以最好配合自己实现的NavigationBar使用,一般不会出现问题。本篇文章主要讲的便是如何在原文的基础上判别手指的滑动方向,实现右滑返回效果。

下面直接贴代码:

@interface HomeNavigationController ()<UIGestureRecognizerDelegate>
@property (weak, nonatomic) UIPanGestureRecognizer *pan;
@end

@implementation HomeNavigationController

- (void)viewDidLoad
{
    [super viewDidLoad];
    id target = self.interactivePopGestureRecognizer.delegate;
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
    pan.delegate = self;
    self.pan = pan;
    [self.view addGestureRecognizer:pan];
    self.interactivePopGestureRecognizer.enabled = NO;
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    CGPoint point = [self.pan translationInView:self.view];
    if (self.childViewControllers.count == 1) { //当只有一个自控制器时不可滑动
        return NO;
    } else if (point.x <= 8) { //当滑动是向右滑的时候,不可滑动
        return NO;
    }
    return YES;
}

关于手势滑动的部分,可以参看原文,这里主要讲的是手势方法代理中的部分。UIPanGestureRecognizer是拖动手势,本身不支持滑动方向的判别,所以需要我们自己通过代码来判断UIPanGestureRecognizer拖动手势的滑动方向,网上常见的方法是在拖动手势的action中判断,但是由于本文中介绍的方法比较特殊,action调用的是系统自带的方法,我们无法更改,所以只能退而求其次的在代理方法中进行判断。

通过代码我们可以取得一个Point属性,这是一个结构体数据,有x,y两种属性,当手势拖动右滑的时候x>0,左滑x<0,当点击屏幕是x = 0,上滑下滑同理,而且随着手势滑动的速度越快,x,y的绝对值就越大,通过这种方法就可以轻松的判断手势滑动的方向。而且通过判断x的大小,可以设置触发右滑返回的难度。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS开发—IOS自定义任意位置右滑POP视图控制器

本篇介绍通过添加手势的方法实现IOS当前屏幕任意位置(非指定左边缘)右滑pop视图控制器出栈。

自定义全屏滑动返回手势

iOS中如果不自定义UINavigationBar,通过手势向右滑是可以实现返回的,这时左边的标题文字提示的是上一个ViewController的标题,如果需要把文字改为简约风格,例如弄过箭头返回啥的...

Swift - 导航控制器(navigationController)全屏滑动返回功能实现

navigationController(导航控制器)的view自带了滑动手势,只要在屏幕左侧向右拖动页面,就可以滑动返回到前面一个页面。但这个功能仅在屏幕左侧边缘滑动才能触发,我们可以稍作改造,让其...

Swift 全屏支持手势返回

利用 Runtime+KVC 实现全屏手势返回

iOS 实现全屏右滑返回功能解析!

由于大屏手机的广泛运用,单手操作变得越加困难,尤其是对于手小的朋友,让我如何单手玩手。而苹果手机不像安卓手机能够有返回的物理键,对于app要全屏右滑或保持原生边缘触发,各有说辞,这里不讨论其好坏. ...

iOS自定义NavigationBar

日常开发中少不了用到UINavigationController,但是很多情况都要自定义NavigationBar。依稀记得自己刚开始也踩了好多坑,凑今天有空,就把想到的写下来。有时间了,考虑再把自定...

iOS8 自定义navigationbar 以及 UIBarButtonItem 边距问题

一。自定义navigationbar   - (void)initNavigationBar{ [self.navigationController setNavigat...

iOS自定义NavigationBar

日常开发中少不了用到UINavigationController,但是很多情况都要自定义NavigationBar。个人感觉这玩意对新手不友好,依稀记得自己刚开始也踩了好多坑,凑今天有空,就把想到的写...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)