【问题标题】:How to reduce time to load the markers on the ios google mapview?如何减少在 ios google mapview 上加载标记的时间?
【发布时间】:2013-06-21 07:10:21
【问题描述】:

我在 ios 应用程序中使用 google maps sdk,我在 mapview 上添加了一组标记。 要添加到地图视图的标记数量过多,因此在将标记加载到地图上时会阻塞 UI。 有没有其他方法可以将标记添加到不会阻塞 UI 的地图上? 这就是我将标记添加到地图视图的方式。

GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = location;
marker.icon = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]];
marker.title = title;
marker.animated = animated;
marker.tappable = tappable;
marker.map = _mapView;

使用 for 循环迭代上述代码集,并创建标记并将其添加到地图中。

谢谢。

【问题讨论】:

  • 比如说在谷歌地图中一次性添加了 1000 个标记。
  • 地图视图不是“线程安全”的,因此虽然可以在 bg 线程上加载图标,但无法在此处添加标记

标签: iphone ios objective-c google-maps google-maps-sdk-ios


【解决方案1】:

将位置标记系列的整个设置(在我的情况下,我在一个 for 循环中进行)放在另一个线程中,然后该块将让视图先行,放置包括 for 循环的视图设置并显示每个将地图上的标记返回到主线程。希望这有助于=]

版本 1

dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {

        dispatch_async(dispatch_get_main_queue()) {
            for markers {
            let placeMarker = PlaceMarker()
                placeMarker.map = self.mapView
            }
        }
    }

第 2 版,我发现此方法在我的 iPhone 上有效,但在模拟器上崩溃

dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {
        for markers {
            let placeMarker = PlaceMarker()
        dispatch_async(dispatch_get_main_queue()) {

                placeMarker.map = self.mapView
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多