iOS Objective-C 右滑返回手势

本文介绍了在iOS中,由于自定义返回按钮导致系统右滑返回手势失效的问题及其解决方案。通过设置interactivePopGestureRecognizer的代理或添加自定义滑动手势来恢复并实现全屏右滑返回功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS 7 之后,Apple增加了屏幕边缘右滑返回交互的支持,然而iOS导航栏的返回按钮一定制,系统的右滑返回手势就失效了,但是这么顺畅的用户体验方式怎么可以没有呢。网上也有像FDFullscreenPopGesture的第三方,以下文章适合于简单的都有导航栏的情况:

解决问题必须先找到原因,才能对症下药:

原因:自定义返回按钮导致的该手势未起作用是因为在delegate阶段被阻断了。

解决方法有以下两种:
1、自己重新设置interactivePopGestureRecognizer的delegate以让手势继续下去,触发系统的动画action。

在baseNavigationController中添加如下代码:
self.interactivePopGestureRecognizer.delegate = (id)self;
运行程序,你会发现实现了右滑返回,但是滑着滑着你会发现在跟视图控制器上右滑之后,出现了严重的卡顿现象,此时是因为
根视图控制器已经不需要触发右滑返回了,但是右滑的话就会出现卡顿,说明也触发了右滑返回,我们可以在导航控制器中做个筛选,
让可以POP的控制器继续触发。
// 表示的意思是:当挡墙控制器是根控制器了,那么就不接收触摸事件,只有当不是根控制器时才需要接收事件.
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        return self.childViewControllers.count > 1;
    }

2、如果我们知道代理执行action的名字,则可以添加一个自定义的滑动手势,直接调用该系统action。(这就是我们实现整个屏幕右滑返回功能)

打印出系统自带的手势:

// 打印系统自带的手势
    NSLog(@"%@",self.interactivePopGestureRecognizer);
    /**打印结果
    2016-10-24 11:41:37.390833 RightPopGestureDemo[887:325267] <UIScreenEdgePanGestureRecognizer: 0x100210df0; state = Possible; delaysTouchesBegan = YES; view = <UILayoutContainerView 0x10020f100>; target= <(action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x100210cb0>)>>

解决方法:

 // 设置代理
    id target = self.interactivePopGestureRecognizer.delegate;
    // 创建手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
    // 设置pan手势的代理
    pan.delegate = self;
    // 添加手势
    [self.view addGestureRecognizer:pan];
    // 将系统自带的手势覆盖掉
    self.interactivePopGestureRecognizer.enabled = NO;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值