当我更改地图样式 (Mapbox) 时,MGLMapView 隐藏/无法加载注释
MGLMapView hides / fails to load annotations when I change map style (Mapbox)
我刚刚开始为 iOS 使用最新发布的 Mapbox 版本,并成功设置了带有注释的地图。注释需要基于 API 传递的优先级值的自定义图像。为此,我使用 imageForAnnotation 如下:
- (MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation
{
CustomAnnotation *custom = (CustomAnnotation *)annotation;
NSString *name = nil;
if (custom.priority == 1 || custom.priority == 2)
name = @"dot_red";
else if (custom.priority == 3)
name = @"dot_orange";
else if (custom.priority > 3)
name = @"dot_yellow";
else if (custom.priority == -11)
name = @"dot_purple";
MGLAnnotationImage *annotationImage = [mapView dequeueReusableAnnotationImageWithIdentifier:name];
if ( ! annotationImage)
{
UIImage *annoImage = [UIImage imageNamed:name];
annotationImage = [MGLAnnotationImage annotationImageWithImage:annoImage reuseIdentifier:name];
}
return annotationImage;
}
但是,当我更改地图样式时,所有注释都消失了,地图更改代码如下:
[_mapView setStyleURL:kMapSatelliteStyleURL];
[button setTitle:@"Regular" forState:UIControlStateNormal];
button.tag = 1;
现在,当我在地图上平移时,我注意到调试 window 中弹出以下内容“{Worker}[Sprite]:找不到名为的精灵”。这显然是由异步加载引起的问题(来源:https://github.com/mapbox/mapbox-gl-native/issues/1877),但是,建议的解决方法是实现 imageForAnnotation,我还是这样做了。
我在下面附上了我切换地图类型的 3 个屏幕截图:
如您所见,即使再次切换回原始地图,图像也不会重新出现。肯定会再次添加注释(下面的 imageForAnnotation po 的中断部分):
po mapView.annotations
<__NSArrayI 0x7fc1b8dec650>(
<CustomAnnotation: 0x7fc1b8b4b450>,
<CustomAnnotation: 0x7fc1b3df6780>
)
有没有其他人遇到过这个问题并且知道如何解决?我想知道地图样式的改变是否重新排序了地图图层,因此在地图图块下方绘制了注释?
非常感谢任何帮助。
I am wondering whether the changing of map style re-orders the map layers, therefore annotations are drawn below the map tiles?
这听起来不对。请 open a ticket 以便我们可以直接解决这个问题。
这是一个已知问题,这里有一张票:
我刚刚开始为 iOS 使用最新发布的 Mapbox 版本,并成功设置了带有注释的地图。注释需要基于 API 传递的优先级值的自定义图像。为此,我使用 imageForAnnotation 如下:
- (MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation
{
CustomAnnotation *custom = (CustomAnnotation *)annotation;
NSString *name = nil;
if (custom.priority == 1 || custom.priority == 2)
name = @"dot_red";
else if (custom.priority == 3)
name = @"dot_orange";
else if (custom.priority > 3)
name = @"dot_yellow";
else if (custom.priority == -11)
name = @"dot_purple";
MGLAnnotationImage *annotationImage = [mapView dequeueReusableAnnotationImageWithIdentifier:name];
if ( ! annotationImage)
{
UIImage *annoImage = [UIImage imageNamed:name];
annotationImage = [MGLAnnotationImage annotationImageWithImage:annoImage reuseIdentifier:name];
}
return annotationImage;
}
但是,当我更改地图样式时,所有注释都消失了,地图更改代码如下:
[_mapView setStyleURL:kMapSatelliteStyleURL];
[button setTitle:@"Regular" forState:UIControlStateNormal];
button.tag = 1;
现在,当我在地图上平移时,我注意到调试 window 中弹出以下内容“{Worker}[Sprite]:找不到名为的精灵”。这显然是由异步加载引起的问题(来源:https://github.com/mapbox/mapbox-gl-native/issues/1877),但是,建议的解决方法是实现 imageForAnnotation,我还是这样做了。
我在下面附上了我切换地图类型的 3 个屏幕截图:
如您所见,即使再次切换回原始地图,图像也不会重新出现。肯定会再次添加注释(下面的 imageForAnnotation po 的中断部分):
po mapView.annotations
<__NSArrayI 0x7fc1b8dec650>(
<CustomAnnotation: 0x7fc1b8b4b450>,
<CustomAnnotation: 0x7fc1b3df6780>
)
有没有其他人遇到过这个问题并且知道如何解决?我想知道地图样式的改变是否重新排序了地图图层,因此在地图图块下方绘制了注释?
非常感谢任何帮助。
I am wondering whether the changing of map style re-orders the map layers, therefore annotations are drawn below the map tiles?
这听起来不对。请 open a ticket 以便我们可以直接解决这个问题。
这是一个已知问题,这里有一张票: