UINavigationController全屏右滑返回

导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能。 

导航控制器的view自带了滑动手势,当用户在界面左边拖动,就会触发滑动手势方法,并且有滑动返回功能,说明系统手势触发的方法已经实现了滑动返回功能。 

系统自带的滑动手势interactivePopGestureRecognizer ,打印出来:
NSLog(@"%@",self.interactivePopGestureRecognizer);
打印结果: 

8行代码教你搞定iOS导航控制器全屏滑动返回效果

由图中可知: 

1.系统自带的手势是UIScreenEdgePanGestureRecognizer类型对象,屏幕边缘滑动手势 

2.系统自带手势target是_UINavigationInteractiveTransition类型的对象 

3.target调用的action方法名叫handleNavigationTransition: 

实现全屏滑动功能 

添加一个全屏的滑动手势,调用系统滑动手势的target的action方法,利用系统实现的滑动返回功能,加上自己全屏滑动手势,就有全屏滑动功能了。 打印delegate:

NSLog(@"%@",self.interactivePopGestureRecognizer.delegate);

8行代码教你搞定iOS导航控制器全屏滑动返回效果

导航控制器全屏滑动注意点: 

1.禁止系统自带滑动手势使用。 

2.只有导航控制器的非根控制器才需要触发手势,使用手势代理,控制手势触发。 

代码:

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

// 每次触发手势之前都会询问下代理,是否触发。用来拦截手势触发
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{  
// 只有非根控制器才有滑动返回功能,根控制器没有。   
if (self.childViewControllers.count == 1) {        
return NO;  
}  
return YES;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值