MGLRasterTileSource 绘制在 MGLOverlay 上方或其他不需要的图层下方。如何获得正确的 z 顺序?
MGLRasterTileSource is drawn above MGLOverlay or below other unwanted layers. How do I get the z-order right on this?
我正在使用 Mapbox iOS SDK v6.3.0
我的地图上有一个 MGLOverlay,但每当我添加 MGLRasterTileSource 时,它就会出现在叠加层上方并将其隐藏!
我目前已经通过在 style.insertLayer(layer, at: x)
中随机插入数字来修复它
- 在 0 处插入似乎可行,但是当我切换到默认街道地图然后返回到我的自定义图块时,街道地图在我的地图顶部留下了一些垃圾。
- 在 15 处插入似乎显示我的地图图块在所有内容之上,并且仍然在叠加层的下方,但这似乎很容易崩溃。
一定有更简洁的方法来做这件事吧?
默认地图样式 URL 工作正常,这只是我的自定义栅格图块,我必须在其中手动编辑样式以添加源和图层。
只是检查一下,您是否已经尝试添加栅格图层并指定 layer it should go under?像这样:
style.insertLayer(rasterLayer, below: existingLayer)
此外,我建议使用 style layers, as these are more performant and controllable. Did you get a chance to look into the MGLLineStyleLayer for your GPS track? Theres a tutorial on this here。
我正在加载 2 种不同类型的地图
- Mapbox styleURLs:设置起来非常简单,因为您只需设置
mapView.styleURL
- 栅格图块:这些图块添加起来更复杂,您可以调用
addSource()
和 addLayer()
(或者在我的情况下为 insertLayer(layer: below:)
)
我最初使用 MGLPolyline
实现的路线在 styleURL 地图上运行良好,但如我在问题中所述,在栅格瓦片地图上遇到了问题。
Mapbox 支持(Megan,另一个答案)提到我应该尝试使用 MGLLineStyleLayer
,因为它的性能更高,而且我可以更好地控制 z 顺序,因为它在同一个 style.layers
数组,我可以 insertLayer(below:)
(我似乎无法与 MGLPolyline
一起使用)。
但是,一旦我这样做了,styleURL 地图就不再起作用了,因为当我切换到那种地图样式时,它会清除所有样式图层并重建它!
因此,为了最终解决我的问题,我不得不在每次切换到 styleURL 类型的地图时重新添加 MGLLineStyleLayer
(和来源)。
一个 GOTCHYA!现在这确实有效,但由于某种原因我无法缓存 MGLLineStyleLayer
和 MGLShapeSource
并使用源和层中的 addSource
和 addLayer
直接重新添加它我已缓存...
我不得不从头开始重新初始化它们,否则 Mapbox 会抛出我没有正确创建它们的异常。我不知道哪里出了问题,这是唯一似乎有效的方法。
谁知道我偏离了轨道,有一个更简单的解决方案,但这对我有用。
我正在使用 Mapbox iOS SDK v6.3.0
我的地图上有一个 MGLOverlay,但每当我添加 MGLRasterTileSource 时,它就会出现在叠加层上方并将其隐藏!
我目前已经通过在 style.insertLayer(layer, at: x)
- 在 0 处插入似乎可行,但是当我切换到默认街道地图然后返回到我的自定义图块时,街道地图在我的地图顶部留下了一些垃圾。
- 在 15 处插入似乎显示我的地图图块在所有内容之上,并且仍然在叠加层的下方,但这似乎很容易崩溃。
一定有更简洁的方法来做这件事吧?
默认地图样式 URL 工作正常,这只是我的自定义栅格图块,我必须在其中手动编辑样式以添加源和图层。
只是检查一下,您是否已经尝试添加栅格图层并指定 layer it should go under?像这样:
style.insertLayer(rasterLayer, below: existingLayer)
此外,我建议使用 style layers, as these are more performant and controllable. Did you get a chance to look into the MGLLineStyleLayer for your GPS track? Theres a tutorial on this here。
我正在加载 2 种不同类型的地图
- Mapbox styleURLs:设置起来非常简单,因为您只需设置
mapView.styleURL
- 栅格图块:这些图块添加起来更复杂,您可以调用
addSource()
和addLayer()
(或者在我的情况下为insertLayer(layer: below:)
)
我最初使用 MGLPolyline
实现的路线在 styleURL 地图上运行良好,但如我在问题中所述,在栅格瓦片地图上遇到了问题。
Mapbox 支持(Megan,另一个答案)提到我应该尝试使用 MGLLineStyleLayer
,因为它的性能更高,而且我可以更好地控制 z 顺序,因为它在同一个 style.layers
数组,我可以 insertLayer(below:)
(我似乎无法与 MGLPolyline
一起使用)。
但是,一旦我这样做了,styleURL 地图就不再起作用了,因为当我切换到那种地图样式时,它会清除所有样式图层并重建它!
因此,为了最终解决我的问题,我不得不在每次切换到 styleURL 类型的地图时重新添加 MGLLineStyleLayer
(和来源)。
一个 GOTCHYA!现在这确实有效,但由于某种原因我无法缓存 MGLLineStyleLayer
和 MGLShapeSource
并使用源和层中的 addSource
和 addLayer
直接重新添加它我已缓存...
我不得不从头开始重新初始化它们,否则 Mapbox 会抛出我没有正确创建它们的异常。我不知道哪里出了问题,这是唯一似乎有效的方法。
谁知道我偏离了轨道,有一个更简单的解决方案,但这对我有用。