iOS地图开发 MapKit点击地图空白处事件的实现

在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里做你想做的事吧。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容