通过手势UIGestureRecognizerDelegate 代理方法解决
首先:外部的scrollview
UIScrollView *scrollView = [[UIScrollView alloc] init];
self.mainScrollView = scrollview;
[self.view addSubview:self.mainScrollView];
// 给主scrollview 添加手势
UIGestureRecognizer *mainScrollVTap = [[UIGestureRecognizer alloc]init];
mainScrollVTap.delegate=self;
[self.mainScrollView addGestureRecognizer:mainScrollVTap];
其次: 给BMKMapView 添加手势
BMKMapView *mapView = ({
CGFloat x = 0.0;
CGFloat y = self.view.bounds.origin.y;
CGFloat w = self.view.bounds.size.width;
CGFloat h = mainWidth;
BMKMapView *v = [[BMKMapView alloc] initWithFrame:CGRectMake(x, y, w, h)];
v.delegate = self;
v;
});
self.provinceMapView = mapView;
[self.mainScrollView addSubview:mapView];
UITapGestureRecognizer *provinceMapTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(provinceMapTapped)];
provinceMapTap.delegate = self;
[self.provinceMapView addGestureRecognizer:provinceMapTap];
说明:地图的tap中的方法必须实现
-(void)provinceMapTapped
{
}
再实现手势的代理方法:
#pragma mark 手势代理方法 ,判断触摸的是地图还是外层的view
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
//判断如果是百度地图的view 既可以实现手势拖动 scrollview 的滚动关闭
if ([gestureRecognizer.view isKindOfClass:[BMKMapView class]] ){
self.mainScrollView.scrollEnabled = NO;
return YES;
}else{
self.mainScrollView.scrollEnabled = YES;
return NO;
}
}