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

2017-12-29  本文已影响0人  AlaricMurray
最近项目需要在 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
上一篇 下一篇

猜你喜欢

热点阅读