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

来源:互联网 发布:魔兽3.35数据库 编辑:程序博客网 时间:2024/04/29 08:45

本文是在广州小码哥高级导师吖了个峥的文章《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的大小,可以设置触发右滑返回的难度。

0 0
原创粉丝点击