我在网上搜索了一下周围,发现了如何做我想做的一些想法,但我还是想知道你怎么想我应该做的。
这里是上下文:
我正在开发适用于iOS 5.我用MapKit以显示地图的应用程序,我5000左右的注释添加到它 - 是啊,这似乎很多,但是不用担心,我用聚类库:)。 为了不每当用户打开地图时间加载它们,我在的appDelegate创建它们(I创建注释的阵列,并调用[_mapView addAnnotations:[appDelegate.annotationsToAdd allObjects]];
当我打开地图)。 大约需要约10秒,以创建annotationsToAdd
阵列,所以我觉得这个解决方案是相当不错的了(你有被授权打开地图之前等待的10秒,但你只能等待一次,在推出应用程序的)。 在每一个这些注释的,我有一个“链接”到一个对象,其中包含的值(15个浮子)的阵列。 现在,当我创建注释,该subtitle
方法返回的值之一。
在我的地图的视图控制器,我有2所分段控制。 所述第一个具有3个区段,第二个具有5,它给出15个组合 - 烨再次,这是相同数量的值的对象在我的注释所述阵列具有:)。
所以,你可能已经看到了我的问题来了,我想更新我的地图每注释的字幕(即使在集群中的,为集群提供了基于其持有的脚的平均值)。 我也想是基于注释的副标题的值更新annotationView的颜色/图像。
我可能是错的,但根据我的研究,我明白,你必须删除所有的注释,并重新创建他们都在为了做到这一点。 你明白,这是不是在我的情况选择。 我不能让用户等待他每次改变其中一个控件的值时10秒。
我看到志愿的一篇文章:会是一个工作的解决方案?
我不知道很多关于NSNotification,但我要使用它们?
我非常感谢你们的帮助,我更希望得到一个详细的答案,显示我的步骤,我显然是罕见的情况可循。
提前致谢。
我很抱歉,如果我没有终于明白了你的情况比较好,但我觉得我对解决类似的问题,所以我会尽力与大家分享我的想法移动。 我会用你的话的导游对我的回应:
“你有被授权打开地图前等待那10秒。”
你知道以下<MKOverlayView>
协议方法(见http://developer.apple.com/library/IOs/#documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html ):
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
- (BOOL)canDrawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale
(假设你对整个世界地图5000个针脚,而不是在每一个FX1公里,即不销的那么大的量),您可以将您五千分成的部分,所以销中的每个部分是由相应的填充MKMapRect
区域正被绘制在地图上。 所以,你的地图,在任何给定的时间填充针/注解,通过需求,只有在特定的区域。 根据您的情况,这可能带来巨大的提升速度。
这是工作的一个很好的示范MKMapRect
瓷砖: https://github.com/mtigas/iOS-MapLayerDemo -随着信息只有地图的某些部分填充。 你也可以google
像“地图图块256PX”理解地图是如何被绘制的东西。
“据我所知,你必须删除所有的注释,并重新创建他们都在为了做到这一点。”
为什么要重建? 你必须所有已经存在你的地图上注释的访问 - 为什么不通过你的相关注释类迭代和更新他们的字幕?
就像是:
- iPad的Mapkit - “当前位置”的变化称号
- 注释标注标题不会改变
我希望我做点解决您的问题/情况的范围。
首先,你应该只是一次全部添加注释,不使用聚类库:
在配置地图界面,你应该添加您所有的注释对象的时候了。 地图视图使用每个注释对象的坐标数据,以确定当对应的注释视图需要出现在屏幕上。
(来自的MKMapView类参考 )。
的MKMapView将管理它们给你,让你的应用程序不会减慢。 这种方法可能不会比你在做什么比较慢,然后就可以在理论上这样做:
[mapView removeAnnotations:mapView.annotations];
//add your annotations here
如果你想将它们全部删除,然后添加他们都回来了。
但是,你不正确,你必须立即将它们全部删除。 如果你知道一个特定的注解,你可以简单地做:
[mapView removeAnnotation:someAnnotation];
[mapView addAnnotation:someOtherAnnotation];
如果您有替换的一个NSArray,你甚至可以:
[mapView removeAnnotations:arrayOfOldAnnotations];
[mapView addAnnotations:arrayOfNewAnnotations];
最后,如果你想修改批注,您可以使用国际志愿者组织(见做这个堆栈溢出的问题 ),但它只是作为容易取出,再加入一个,只要你AREN用户不会注意到“T动画的加载。