关闭

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

标签: iOS界面右滑返回
1488人阅读 评论(0) 收藏 举报
分类:

本文是在广州小码哥高级导师吖了个峥的文章《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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9257次
    • 积分:259
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类