来自url的注释的MapBox图像

时间:2016-02-03 21:20:33

标签: ios objective-c mapbox

我正在使用MapBox,而现在,我遇到了下一个问题:我使用MapBox的委托方法来实现注释的图像。现在我有一些需要从URL加载的注释图像。问题是在从URL加载图像之前调用自定义图像的方法,并且没有在地图上显示的图像。这是方法中的代码:

- (MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation
{
 MGLAnnotationImage *annotationImage = [mapView dequeueReusableAnnotationImageWithIdentifier:@"custom"];
NSURL *url = [NSURL URLWithString:@"http://www.fnordware.com/superpng/pnggrad16rgb.png"];

NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
annotationImage = [MGLAnnotationImage annotationImageWithImage:image reuseIdentifier:@"customUrl"];
}

1 个答案:

答案 0 :(得分:2)

加载网络资源并将其用作注释图像的两种方法:

  1. 使用占位符图像,然后在加载实际图像后更新注释。

    Mapbox iOS SDK v3.1.0 +支持更新映像;以前这需要删除并重新添加注释。

  2. 在添加注释之前下载图像。

  3. 此外,您包含的代码不会检查注释图像是否可以出列并重复使用 - 它始终会创建新的注释图像。重用模式应该看起来更like this

    - (MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation
    {
        MGLAnnotationImage *annotationImage = [mapView dequeueReusableAnnotationImageWithIdentifier:@"customImage"];
    
        if ( ! annotationImage)
        {
            UIImage *image = [UIImage imageNamed:@"customImage"];
            annotationImage = [MGLAnnotationImage annotationImageWithImage:image reuseIdentifier:@"customImage"];
        }
    
        return annotationImage;
    }