小编典典

MKMapView:自定义视图代替了注释钉

swift

我要显示图像MKMapView而不是小 别针

有人可以在这里放置一些有用的代码,或告诉它怎么做吗?

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
    (id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil; 
    if(annotation != mapView.userLocation) 
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) pinView = [[MKPinAnnotationView alloc]
                                          initWithAnnotation:annotation reuseIdentifier:defaultPinID];

        pinView.pinColor = MKPinAnnotationColorGreen; 
        pinView.canShowCallout = YES;
        pinView.animatesDrop = YES;
        pinView.image = [UIImage imageNamed:@"pinks.jpg"]; //as suggested by Squatch
    } 
    else {
        [mapView.userLocation setTitle:@"I am here"];
    }
    return pinView;
}

我希望我的图片 pinks.jpg 会显示在地图上,而不是默认的图钉视图( 石头图钉形状 ),而是固定位置。但是我仍然得到该引脚的默认图像。


阅读 324

收藏
2020-07-07

共1个答案

小编典典

如果要将自己的图像用于注释视图,则应创建一个,MKAnnotationView而不是MKPinAnnotationView

MKPinAnnotationView是的子类,MKAnnotationView因此具有image属性,但通常会覆盖该属性并绘制图钉图像(这就是它的作用)。

因此,将代码更改为:

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation 
{
    MKAnnotationView *pinView = nil; 
    if(annotation != mapView.userLocation) 
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) 
            pinView = [[MKAnnotationView alloc]
                                         initWithAnnotation:annotation reuseIdentifier:defaultPinID];

        //pinView.pinColor = MKPinAnnotationColorGreen; 
        pinView.canShowCallout = YES;
        //pinView.animatesDrop = YES;
        pinView.image = [UIImage imageNamed:@"pinks.jpg"];    //as suggested by Squatch
    } 
    else {
        [mapView.userLocation setTitle:@"I am here"];
    }
    return pinView;
}

请注意,animatesDrop由于该属性仅存在于中,因此也将其注释掉 MKPinAnnotationView

如果仍然要删除图像批注,则必须自己制作动画。您可以在Stack Overflow中搜索“ animatesdrop
mkannotationview”,并找到几个答案。

2020-07-07