iOS 侧滑返回手势与Scrollview冲突的解决办法

苹果在iOS7.0以后推出了一个侧滑返回手势,当导航栏Push到下一页时,可以通过侧滑手势pop到上一页,这大大提高了用户的体验度,同时增加了可玩性。
然而有些时候,当你push到另一个界面后,如果该界面有Scrollview或继承于Scrollview(tableview,collectionview)的控件,这时你可能会发现返回手势失效了,这个是为什么喃?
经过我多番验证,原来是这个控件拦截了手势(这个地方不清楚的小伙伴可以去看看手势的响应链)。当然,这个对app功能没什么影响,但是基于用户体验来说,这是一个很坏的体验!!

方案一:解决办法就是对Scrollview加个Category,重写它代理的方法,让手势能够传递下去

第一步,新建一个Scrollview的CateGory , 或者继承自UIScrollview

第二步,重写这个方法,让手势能够传递下去

-第三步,就是对是否是左滑返回手势的判断了

最后附上代码:

#import <UIKit/UIKit.h>

@interface BaseScrollView : UIScrollView

@end

#import "BaseScrollView.h"

@implementation BaseScrollView

// 参考链接 : https://www.jianshu.com/p/419e3b081e5a
//是否支持多手势触发,返回YES,则可以多个手势一起触发方法,返回NO则为互斥.
//是否允许多个手势识别器共同识别,一个控件的手势识别后是否阻断手势识别继续向下传播,默认返回NO;如果为YES,响应者链上层对象触发手势识别后,如果下层对象也添加了手势并成功识别也会继续执行,否则上层对象识别后则不再继续传播
//一句话总结就是此方法返回YES时,手势事件会一直往下传递,不论当前层次是否对该事件进行响应。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
   
    if ([self isPanBackAction:gestureRecognizer]) {
        return YES;
    }
    return NO;
    
}
/// 判断是否是全屏的返回手势
- (BOOL)isPanBackAction:(UIGestureRecognizer *)gestureRecognizer {
    
    // 在最左边时候 && 是pan手势 && 手势往右拖
    if (self.contentOffset.x == 0) {
        if (gestureRecognizer == self.panGestureRecognizer) {
            // 根据速度获取拖动方向
            CGPoint velocity = [self.panGestureRecognizer velocityInView:self.panGestureRecognizer.view];
            if(velocity.x>0){
                //手势向右滑动
                return YES;
            }
        }
        
    }
    return NO;
}

// 如果是全屏的左滑返回,那么ScrollView的左滑就没用了,返回NO,让ScrollView的左滑失效
// 不写此方法的话,左滑时,那个ScrollView上的子视图也会跟着左滑的
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    if ([self isPanBackAction:gestureRecognizer]) {
        return NO;
    }
    return YES;

}


@end

   

原文链接 :https://www.jianshu.com/p/419e3b081e5a ,

对方案1进行了改动, 改成了本文的样子
方案2,也试了试,系统返回与Scrollview的左滑冲突还是比较大的,左滑时,很可能只是想看上一页,但是却pop回去了.  不太推荐


 

发布了101 篇原创文章 · 获赞 33 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/u014600626/article/details/104236665