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 - 实现UINavigation全屏滑动返回(一)

要点interactivePopGestureRecognizer 是UINavigationController自带手势,当我们自定义了导航条的返回按钮后,这个手势就自动失效了,也就是说无法滑动返回...

iOS 一个丝滑的全屏滑动返回手势

原文链接:http://blog.sunnyxx.com/2015/06/07/fullscreen-pop-gesture/ 全屏返回手势 自 iOS7 之后,Apple 增加了...

ios全局返回按钮和全屏侧滑功能

一. 解释返回控制器1. 导航条返回控制器按钮:当一个控制器进入另外一个控制器的时候,需要从另外一个控制器中返回,如果程序猿不自定义返回按钮,那么控制器中的导航条会默认返回按钮在导航条的左侧.2. 功...

自定义全屏滑动返回手势

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

iOS 边缘滑动返回

边缘滑动返回,在设置了自定义导航条或者自定义左button的时候会失效,通过这句话可以解决bug :self.navigationController.interactivePopGestureRe...

ios 8行代码教你搞定导航控制器全屏滑动返回效果

一、自定义导航控制器 目的:以后需要使用全屏滑动返回功能,就使用自己定义的导航控制器。 二、分析导航控制器侧滑功能 效果:导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功...

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

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

隐藏底部虚拟键NavigationBar实现全屏

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.v...

iOS7自定义statusbar和navigationbar的若干问题

转自:http://www.th7.cn/Program/IOS/201409/283576.shtml 如有侵犯,请来信oiken@qq.com 当然有许多问题是这篇文章中没有提到的...
  • oiken
  • oiken
  • 2015年10月09日 01:47
  • 588

iOS自定义NavigationBar

日常开发中少不了用到UINavigationController,但是很多情况都要自定义NavigationBar。依稀记得自己刚开始也踩了好多坑,凑今天有空,就把想到的写下来。有时间了,考虑再把自定...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS自定义NavigationBar后如何实现全屏右滑返回
举报原因:
原因补充:

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