iOS 滑动返回手势与滚动视图手势冲突问题

最近项目中有一个聊天的页面,不是本人做的,其中键盘视图有一个自己的表情视图,这个选择表情的视图是一个滚动视图,如果在向右滑动表情的滚动视图的时候,滑动的位置太靠右的话,就会触发UINavigationController的向右滑动返回,整个聊天页面就会pop掉了。为了避免这种冲突,我们需要对滚动视图的手势和边缘触发返回的手势进行处理。 首先,看API的话,会发现滚动视图的一个属性,也就是滚动视图滑动的手势;

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);

然后,手势的话,有一个可以解决这个问题的API方法,这个方法我在网上查,理解就是,如果otherGestureRecognizer这个手势没有执行成功的话,才会执行调用这个方法的手势。

- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

再然后,我们需要获取这两个本来会发生冲突的手势:

1.滚动视图的手势就不用多说了,用属性的getter取就好了:

self.scrollView.panGestureRecognizer;

2.边缘返回的手势,用一个方法就可以获取到:

- (UIScreenEdgePanGestureRecognizer *)screenEdgePanGestureRecognizer
{
    UIScreenEdgePanGestureRecognizer *screenEdgePanGestureRecognizer = nil;

    if (self.navigationController.view.gestureRecognizers.count > 0) {
        for (UIGestureRecognizer *recognizer in self.navigationController.view.gestureRecognizers){
            if ([recognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
                screenEdgePanGestureRecognizer = (UIScreenEdgePanGestureRecognizer *)recognizer;
                break;
            }
        }
    }
    return screenEdgePanGestureRecognizer;
}

最后,我们用手势的requireGestureRecognizerToFail:这个方法来处理这两个手势就好了:

[[self screenEdgePanGestureRecognizer] requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];

也就是说,我们在操作滚动视图的时候的,只要滚动视图的手势能够触发,就不会执行滑动返回的那个手势,并且除了这个滚动视图外,在其他地方对滑动返回没有影响。


第一次写技术型的笔记,没有什么经验,所以大家多多提意见,如果内容写的不对的,误导性的,也请慷慨指出,肯定会虚心更正的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 3,921评论 1 22
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,232评论 4 61
  • 手势识别器是附加到视图的对象,将低级别事件处理代码转换为更高级别的操作,它允许视图以控件执行的方式响应操作。 手势...
    坤坤同学阅读 4,128评论 0 9
  • 《在人生拐角处》通过多个事例说明了不同情况的人遭遇到了不同的迷茫,从这些人中或多或少也看到了自己的影子。 有的人只...
    水鸟阅读 1,010评论 0 1
  • http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958...
    喵在野阅读 346评论 0 2