gpt4 book ai didi

ios - MapKit 中 2000 多个注释的最佳实践

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:19 26 4
gpt4 key购买 nike

我有一个 JSON 文件,其中包含大约 2,000 个位置,本地图相机高度低于 750 米时,我需要在 map 上显示这些位置。这是我当前的代码:

func addStops() {
var path: String! = NSBundle.mainBundle().pathForResource("stops", ofType: "json")
var jsonData: NSData! = NSData(contentsOfFile: path)
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
self.busStops = jsonResult["results"] as NSArray

for (var i = 0; i < self.busStops.count; i++) {
let lat = self.busStops[i]["latitude"] as NSString
let lng = self.busStops[i]["longitude"] as NSString

var annotation = busAnno()
annotation.setCoordinate(CLLocationCoordinate2DMake(CLLocationDegrees(lat.doubleValue), CLLocationDegrees(lng.doubleValue)))
annotation.type = "stop"
self.mapView.addAnnotation(annotation)
}
}

注释 View 委托(delegate):

func mapView (mapView: MKMapView!, viewForAnnotation annotation: MKPointAnnotation!) -> busMarker! {
var pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: "point")
pinView.location = annotation.location
pinView.hidden = true
pinView.layer.hidden = true
pinView.enabled = false
}

我以为只隐藏 View 就可以逃脱,但应用程序在添加标记后甚至需要 20 秒才能响应,然后就不可能平滑地移动 map (下降到每秒大约 5 帧) ).

所以,如果我不能这样做,什么是更好的方法?我猜想每次 map 移动时检查一对坐标是否在屏幕边界内由于延迟而无法正常工作(基于每次检查 2000 个坐标)。有什么想法吗?

编辑

您只能看到 2000 年的大约 10 个注释,因为您必须非常放大才能看到任何注释。这只是我使用哪种方法在该区域中快速找到注释而没有这种可怕的滞后的情况。

最佳答案

您可以轻松地向 MKMapView 添加约 1,000 个注释。看看这个示例项目,它增加了 3,000:

https://github.com/incanus/PointTest

您可以采取多种措施来改善这项工作。

  1. 只需使用MKPointAnnotation,您就不必手动提供 View 。

  2. 如果您确实需要自定义 View ,则应正确使用重用标识符。您目前正在为每个注释创建一个新 View ,而实际上您可以正确地一次又一次地重复使用相似的 View 以获得更高的性能。

  3. 您正在主 UI 线程中解析和添加注释,这会影响触摸响应性能。请参阅上面的项目,了解在后台使用 Grand Central Dispatch 执行此操作的方法,同时仍然在主 UI 线程中实际添加注释(我可能会一次性添加)。

您无需担心注释是否显示在屏幕上。 MapKit 会为您做这件事,这就是为什么它在委托(delegate)回调中而不是预先查询 View 的原因。

以下链接不再有效(2017 年 10 月)

这是在 iPhone 5s 上实时显示 3,000 个注释的视频:

https://dl.dropboxusercontent.com/u/575564/3000points.mov

关于ios - MapKit 中 2000 多个注释的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com