1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- //
- // SLNavigationController.m
- // DarkMode
- //
- // Created by wsl on 2020/6/11.
- // Copyright © 2020 https://github.com/wsl2ls ----- . All rights reserved.
- //
- #import "SLNavigationController.h"
- @interface SLNavigationController ()<UIGestureRecognizerDelegate>
- @end
- @implementation SLNavigationController
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.view.backgroundColor =[UIColor clearColor];
-
- // 获取系统自带滑动手势的target对象
- id target = self.interactivePopGestureRecognizer.delegate;
- // 创建全屏滑动手势,调用系统自带滑动手势的target的action方法
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wundeclared-selector"
- UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
- #pragma clang diagnostic pop
- // 设置手势代理,拦截手势触发
- pan.delegate = self;
- // 给导航控制器的view添加全屏滑动手势
- [self.view addGestureRecognizer:pan];
- // 禁止使用系统自带的pop滑动手势
- self.interactivePopGestureRecognizer.enabled = NO;
- }
- #pragma mark -- UIGestureRecognizerDelegate
- // 什么时候调用:每次触发手势之前都会询问下代理,是否触发。
- // 作用:拦截手势触发
- - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
- // 注意:只有非根控制器才有滑动返回功能,根控制器没有。
- // 判断导航控制器是否只有一个子控制器,如果只有一个子控制器,肯定是根控制器
- if (self.childViewControllers.count == 1 ) {
- // 表示用户在根控制器界面,就不需要触发滑动手势,
- return NO;
- }
- return YES;
- }
- //触发之后是否响应手势事件
- //处理侧滑返回与UISlider的拖动手势冲突
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
- //如果手势是触摸的UISlider滑块触发的,侧滑返回手势就不响应
- if ([touch.view isKindOfClass:[UISlider class]]) {
- return NO;
- }
- return YES;
- }
- @end
|