swift 使用谷歌Map“已达到纹理Map集的最大数量,无法分配更多”

v6ylcynt  于 2023-03-11  发布在  Swift
关注(0)|答案(3)|浏览(135)

我正在构建一个使用GoogleMap和大量覆盖图的应用程序,似乎当我尝试加载大量覆盖图时,它会停止并向我提供 "((null))为假:已达到纹理Map集的最大数量,无法分配更多。"
我只是以这种方式添加图像作为叠加:

...
if (image != nil) {
                let image: CGImage = (image?.cgImage)!
                let icon = UIImage(cgImage: image)

                let overlay = GMSGroundOverlay(bounds: overlayBounds, icon: icon)
                overlay.bearing = 0
                overlay.map = map
                overlay.zIndex = 10

                self.overlays.append(overlay);

对于如何解决此问题有何建议?

umuewwlo

umuewwlo1#

问题似乎是您为每个标记/覆盖图分配了一个单独的UIImage示例。这意味着当您在GMSMapView示例上绘制标记时,每个标记都有一个单独的UIImage。
如果要使用同一个图像创建多个标记,请对每个标记使用同一个UIImage示例。这有助于在显示多个标记时提高应用程序的性能。
简单地说,您需要限制要追加的覆盖图。您的图像是动态的还是静态的?如果是同一图像,一个简单的解决方案是定义一次图像,然后在追加覆盖图时添加对同一图像的引用。如果图像是动态的,则可以在代码中合并图像,并在“Map”中仅使用一个覆盖图。

qyzbxkaa

qyzbxkaa2#

不是设置marker的iconView,而是设置marker的icon,这也会在for循环之外初始化图像:

func displayMarkers() {
    let iconImage = UIImage(named: "locationgreen")
    for partner in partners {
        let lat : Double = Double(partner.location?.coordinates![1] ?? 0)
        let lng : Double = Double(partner.location?.coordinates![0] ?? 0)

        let position = CLLocationCoordinate2D(latitude: lat, longitude: lng)
        let marker = GMSMarker(position: position)
        marker.title = partner.name
        marker.icon = iconImage
    }
}
b1zrtrql

b1zrtrql3#

试试看

if let image = image {
    let overlay = GMSGroundOverlay(bounds: overlayBounds, icon: icon)
    overlay.bearing = 0
    overlay.map = map
    overlay.zIndex = 10

    self.overlays.append(overlay)
}

相关问题