解决scrollview、tableview和百度地图手势冲突的问题

最近项目需要在 tableview 里加入地图,而 tableview 本身又添加在 scrollview 上,导致滑动地图时出现了手势冲突:
QQ20171229-092814.gif

首先在自定义的tableview中加入UIGestureRecognizerDelegate,在初始化方法中加入 :

self.panGestureRecognizer.delegate = self;

然后实现手势的代理方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
    //判断tableView是否滑动到最底部(或最顶部,此处最底), round函数:四舍五入
    if (round(self.contentOffset.y) == round(self.contentSize.height - self.frame.size.height)) {
        // 判断当前View是否是百度地图的手势处理视图TapDetectingView.
        if([NSStringFromClass([touch.view class])isEqual:@"TapDetectingView"]){
            //若为百度地图的手势处理视图TapDetectingView则tableView的手势事件不响应
            return NO;
        }
    }
    
    
    return YES;
}

运行后发现地图上下滑动确实不跟随tableview一起动了,但左右滑动还是会与scrollview冲突:


QQ20171229-093628.gif

于是,给 scrollview 添加代理,实现 scrollViewDidScroll:这个方法:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
//    只有当tableview滑到最低部时才禁用scrollview
    if (round(_tableView.contentOffset.y) == round(_tableView.contentSize.height - _tableView.frame.size.height)) {
        
//        当滑动的范围小于屏幕宽度时,禁止scrollView滑动
        if (scrollView.contentOffset.x < SCREEN_WIDTH) {
            self.scrollView.scrollEnabled = NO;
        }
        else {
            self.scrollView.scrollEnabled = YES;
        }
    }
//    其他照旧
    else{
        self.scrollView.scrollEnabled = YES;
    }
    
}

运行后发现地图上下滑动、左右滑动均不受影响了:


QQ20171229-100049.gif

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 8,712评论 4 47
  • 首先在tableView里面实现cell的左滑删除功能是挺简单的,相信大家都懂得怎么做。但是,当有多个tableV...
    长发飘飘陈序员阅读 7,324评论 21 37
  • 我所理解的员工的忠诚:员工的忠诚不是愚忠,不是简单地为企业效命,而是要首先忠诚于自己的职责和事业,把自己的职责、事...
    鼗豸爻爻阅读 100评论 0 0
  • 这一周李笑来更新的概念是“双倍”。 按照自己理解回顾一下关于“双倍”这个概念他主要讲了些什么? (一)双倍 做同一...
    zishigzy阅读 262评论 0 0
  • 我是日记星球213号星宝宝秀兰,正在参加孙老师的日记星球21天蜕变之旅的写作训练,这是我的第24篇原创日记。 你看...
    雨珺阅读 186评论 2 3