我正在尝试加载地图区域,并且没有在第二次或后续加载时调用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协议参考文档中找到了这些行。突出显示的行是我的问题。
当加载了与当前请求关联的地图图块时,将调用此方法。 当新的可见区域滚动到视图中并且磁贴尚不可用时,会请求地图图块。对于当前不可见的地图部分,也可以请求地图图块。例如,地图视图可以根据需要加载紧邻当前可见区域的图块,以便用户处理小平底锅。
我需要在加载地图后执行某些操作,但由于没有调用上述任何委托方法,因此我无法执行所需的功能。任何人都可以建议修复清除缓存或为此提供替代解决方案吗?我已经尝试使用here和this所述的方法,但我仍然无法使代码正常工作。
答案 0 :(得分:3)
我认为您可以将willStartLoadingMap
,didFinishLoadingMap
和regionDidChange
结合在一起,如下所示:
willStartLoadingMap
中将loading
标记设置为true; didFinishLoadingMap
中将加载flag
设置为false,并检查是否对捕获屏幕的方法进行了排队调用。如果是这样,请致电; regionDidChange
中检查loading
标志,如果设置为false,则调用捕获屏幕的方法。否则,将其排队,以便在地图完成加载时执行。这样,您可以确保在加载图块后捕获屏幕。
但是,可以多次调用regionDidChange,因此请确保仅在地图视图发生显着变化时抓取屏幕(您可以比较之前的地图区域/中心和当前地图区域/中心)。
答案 1 :(得分:2)
我创建了一个新项目并将委托连接到我的视图控制器。这三个问题的前两个方法被称为。由于它加载了所有tile,因此未调用error delegate方法。
我最近刚遇到类似的问题。我将MKMapView子类化,忘记在我的自定义init
方法和awakeFromNib:
中设置委托。也许这也是造成问题的原因。