现在许多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'
最后,希望这篇文章对各位看官们有所帮助。
网友评论