iOS页面返回之滑动手势

2017-01-12  本文已影响1100人  神SKY

现在许多App都有滑动手势让页面返回的效果,在这里先上两个效果图:


效果一
效果二

效果一的实现

要实现效果一,只需要几行代码

首先,找到视图控制器的导航栏控制器UINavigationController
然后,在该类中添加手势的协议,如下:

#import "baseNavigation.h"

@interface baseNavigation ()<UIGestureRecognizerDelegate>

@end

接下来在viewDidLoad中添加如下代码:

- (void)viewDidLoad {
    [super viewDidLoad];
//    获取系统自带滑动手势的target对象
    id target = self.interactivePopGestureRecognizer.delegate;
//    创建滑动手势,并调用系统自带的滑动手势target的方法
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:target action:@selector(handleNavigationTransition:)];
//    设置手势代理
    pan.delegate = self;
//    添加滑动手势
    [self.view addGestureRecognizer:pan];
//    禁止使用系统自带的滑动手势
    self.interactivePopGestureRecognizer.enabled = NO;
}

最后,调用协议里的gestureRecognizerShouldBegin判断一下,如下:

//这个方法是判断手势是否应该触发
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
//    只有非根控制器才开滑动返回,所以再这里判断一下是否为根控制器
    if (self.childViewControllers.count == 1) {
        return NO;
    }
    return YES;

此时,会发现创建手势滑动时所调用的方法会出现警告,可以用如下方法消除:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:target action:@selector(handleNavigationTransition:)];
#pragma clang diagnostic pop

完成如上步骤后,就可以实现效果一的效果


效果一

效果二的实现

效果二是基于效果一实现的,如需要效果二的效果,请先完成效果一

要完成效果二,很简单,只需要在视图控制器中将这个视图控制器的UINavigationBar隐藏,然后自定义一个一模一样的NavigationBar即可(Tips:自定义的UIView的高度为64,状态栏的高度为24)

效果二中的两个页面的UINavigationBar都是隐藏掉的,页面二中的UINavigationBar是小编自定义的视图

效果二

下面是可以了解一下的部分

如果上面的两种效果达不到需求,可以去了解一下小编在GitHub上看到的这个第三方库,附上GitHub地址:https://github.com/forkingdog/FDFullscreenPopGesture
可以用cocoapods安装:

pod 'FDFullscreenPopGesture', '~> 1.1'

最后,希望这篇文章对各位看官们有所帮助。

上一篇 下一篇

猜你喜欢

热点阅读