美文网首页
解决scrollview、tableview和百度地图手势冲突的

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

作者: AlaricMurray | 来源:发表于2017-12-29 10:03 被阅读0次
    最近项目需要在 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

    相关文章

      网友评论

          本文标题:解决scrollview、tableview和百度地图手势冲突的

          本文链接:https://www.haomeiwen.com/subject/xttigxtx.html