如何清除MKMapView缓存?

时间:2011-08-26 06:41:58

标签: objective-c ios4 mkmapview

我正在尝试加载地图区域,并且没有在第二次或后续加载时调用MKMapView委托方法。没有代表方法viz

- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView;
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView;
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error;

永远被称为。唯一被调用的方法是

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

似乎ios4正在缓存mapview tile图像。

我在MKMapViewDelegate协议参考文档中找到了这些行。突出显示的行是我的问题。

当加载了与当前请求关联的地图图块时,将调用此方法。 当新的可见区域滚动到视图中并且磁贴尚不可用时,会请求地图图块。对于当前不可见的地图部分,也可以请求地图图块。例如,地图视图可以根据需要加载紧邻当前可见区域的图块,以便用户处理小平底锅。

我需要在加载地图后执行某些操作,但由于没有调用上述任何委托方法,因此我无法执行所需的功能。任何人都可以建议修复清除缓存或为此提供替代解决方案吗?我已经尝试使用herethis所述的方法,但我仍然无法使代码正常工作。

2 个答案:

答案 0 :(得分:3)

我认为您可以将willStartLoadingMapdidFinishLoadingMapregionDidChange结合在一起,如下所示:

  • willStartLoadingMap中将loading标记设置为true;
  • didFinishLoadingMap中将加载flag设置为false,并检查是否对捕获屏幕的方法进行了排队调用。如果是这样,请致电;
  • regionDidChange中检查loading标志,如果设置为false,则调用捕获屏幕的方法。否则,将其排队,以便在地图完成加载时执行。

这样,您可以确保在加载图块后捕获屏幕。

但是,可以多次调用regionDidChange,因此请确保仅在地图视图发生显着变化时抓取屏幕(您可以比较之前的地图区域/中心和当前地图区域/中心)。

答案 1 :(得分:2)

我创建了一个新项目并将委托连接到我的视图控制器。这三个问题的前两个方法被称为。由于它加载了所有tile,因此未调用error delegate方法。

我最近刚遇到类似的问题。我将MKMapView子类化,忘记在我的自定义init方法和awakeFromNib:中设置委托。也许这也是造成问题的原因。