首先在自定义的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冲突:
于是,给 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;
}
}
运行后发现地图上下滑动、左右滑动均不受影响了: