前言
最近项目开发中,需要用到百度地图,有几个页面是tableview中包含的地图页面,使用过程,发现地图和tableView页面手势有冲突,简直不能忍。于是搜索了相关资料,着手解决了一下。
通过 debug view 调试,发现,地图页面实际上是在一个名为TapDetectingView
类上面加载的,因此只要解决这个类对象和tableview的冲突即可,通过判断当前点击区域是否在地图上,来判断。 原本设置 table。bounces = NO 然后
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
// //判断tableView是否滑动到最底部(或最顶部,此处最底), round函数:四舍五入
// if (round(self.tableView.contentOffset.y) == round(self.tableView.contentSize.height - self.tableView.frame.size.height)) {
// // 判断当前View是否是百度地图的手势处理视图TapDetectingView.
// if([NSStringFromClass([touch.view class])isEqual:@"TapDetectingView"]){
// //若为百度地图的手势处理视图TapDetectingView则tableView的手势事件不响应
// return NO;
// }
// }
if([NSStringFromClass([touch.view class])isEqual:@"TapDetectingView"]){
//若为百度地图的手势处理视图TapDetectingView则tableView的手势事件不响应
return NO;
}
return YES;
}
可以实现这个效果,但是在tableview刷新之后,就不行了,暂不知道为什么。
后来找了一个笨蛋的方法,在tableview上添加了一个UISwipeGestureRecognizer的手势,支持四个方向的。走代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
// //判断tableView是否滑动到最底部(或最顶部,此处最底), round函数:四舍五入
// if (round(self.tableView.contentOffset.y) == round(self.tableView.contentSize.height - self.tableView.frame.size.height)) {
// // 判断当前View是否是百度地图的手势处理视图TapDetectingView.
// if([NSStringFromClass([touch.view class])isEqual:@"TapDetectingView"]){
// //若为百度地图的手势处理视图TapDetectingView则tableView的手势事件不响应
// return NO;
// }
// }
if([NSStringFromClass([touch.view class])isEqual:@"TapDetectingView"]){
//若为百度地图的手势处理视图TapDetectingView则tableView的手势事件不响应
self.tableView.scrollEnabled = NO;
return NO;
}
self.tableView.scrollEnabled = YES;
return YES;
}
此时可以实现效果,但是感觉略微有点卡顿,郁闷。先这样吧
网友评论