【问题标题】:Detecting when MapView tiles are displayed检测何时显示 MapView 瓦片
【发布时间】:2012-07-30 19:23:26
【问题描述】:

由于在从缓存加载切片时不会调用- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView,有没有办法知道所有切片何时已加载(从缓存或映射服务器)并显示?

是否有任何代表团暗示瓷砖已加载?

【问题讨论】:

标签: iphone ios mkmapview mkmapviewdelegate


【解决方案1】:

这是我写的一些源代码: https://github.com/jonathanlking/mapViewTest

你为什么不考虑这样的问题;

当地图视图发生变化时,mapView:regionDidChangeAnimated: 将被调用。

将从那里调用mapViewWillStartLoadingMap:

如果已从服务器获取图块,则将调用下一个 mapViewDidFailLoadingMap:withError:mapViewDidFinishLoadingMap:

但是,如果两者都没有被调用,您可以假设切片是从缓存中加载的。

【讨论】:

  • 谢谢,但仍然无法知道它们何时显示。
  • 它们会立即显示 - 因为它们被缓存了。
  • 抱歉,这不起作用。我删除了我的 iPod Touch 上的互联网连接并缩放到没有缓存切片的级别,它仍然表明地图已成功加载(在您的示例中来自缓存)。这是 Apple 的一个错误。
【解决方案2】:

如前所述,mapViewDidFinishLoadingMap 有时根本不会被调用,尤其是在地图切片已经缓存的情况下,有时会被多次调用。

我注意到,当它在最后一次调用时被多次调用时,所有的图块都会被渲染。所以我认为如果你在地图开始改变后设置一个 2 秒的计时器,你可以让它工作。禁用交互以使地图不会继续更改,并在计时器关闭时启用用户交互。

如果mapViewDidFinishLoadingMap 被调用,则在未来 2 秒内再次重置计时器。当计时器最终关闭时,您应该有一个完全渲染的地图。

您将需要考虑其他回调,例如mapViewDidFailLoadingMap。还要在嘈杂的连接上进行测试,因为如果需要很长时间来获取图块,2 秒可能不够长。

- (void)restartTimer
{
    [self.finishLoadingTimer invalidate];
    self.finishLoadingTimer = [NSTimer scheduledTimerWithTimeInterval:2.0
                                                               target:self
                                                             selector:@selector(mapLoadingIsFinished)
                                                             userInfo:nil
                                                              repeats:NO];
}

- (void)mapLoadingIsFinished
{
    self.finishLoadingTimer = nil;
    self.mapChanging = NO;
    self.view.userInteractionEnabled = YES;
}

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
    if (self.mapChanging) {
        [self restartTimer];
    }
}

- (void)startLookingForMapChange
{
    assert(self.mapChanging == NO);
    if (self.mapChanging == NO) {
        self.mapChanging = YES;
        assert(self.finishLoadingTimer == nil);
        self.view.userInteractionEnabled = NO;
        [self restartTimer];
    }
}

【讨论】:

  • 这不适用于您失去互联网连接的情况,因此无法加载更多图块。它仍然调用代理说地图已完全加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多