在iOS地图开发中,有时候我们需要在用户点击地图空白处的时候执行某些操作,例如隐藏地图上的AnnotationView浮窗。类似百度地图、高德地图这样的第三方SDK提供了点击地图空白处的方法,例如在百度地图的SDK中有以下方法:
/**
*点中底图空白处会回调此接口
*@param mapView 地图View
*@param coordinate 空白处坐标点的经纬度
*/
- (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate;
但是在原生的MapKit中是没有提供类似方法的,不过我们可以通过拦截触摸事件的方式实现,代码如下:
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
UIView *v = [self hitTest:point withEvent:event];
if ([v isKindOfClass: NSClassFromString(@"MKAnnotationContainerView")]) {
[self onClickedMapBlank];
NSLog(@"点击空白区域");
} else if ([v isKindOfClass: NSClassFromString(@"MKAnnotationView")]) {
NSLog(@"点击Annotation区域");
}
}
- (void)onClickedMapBlank{
//doSomething
}
把这些方法写在一个继承MKMapView的自定义view中,在onClickedMapBlank里做你想做的事吧。