我正在使用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"];
}
答案 0 :(得分:2)
加载网络资源并将其用作注释图像的两种方法:
使用占位符图像,然后在加载实际图像后更新注释。
Mapbox iOS SDK v3.1.0 +支持更新映像;以前这需要删除并重新添加注释。
在添加注释之前下载图像。
此外,您包含的代码不会检查注释图像是否可以出列并重复使用 - 它始终会创建新的注释图像。重用模式应该看起来更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;
}