解决TableView与百度地图手势冲突

前言

最近项目开发中,需要用到百度地图,有几个页面是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;
}

此时可以实现效果,但是感觉略微有点卡顿,郁闷。先这样吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值