2009-07-08 58 views
4

问候!我试图在没有任何Apple代码示例的情况下使用MKMapView,尽管还有其他一些其他的清晰度不同。 (我知道,“阅读友好的手册”,我已经这样做了,但它不是100%清楚的,所以请耐心等待。)MKMapView和setRegion:动画:不更新地图视觉

这是情况。我有一个MKMapView对象,其中我已经添加了一组约10个对象。到现在为止还挺好。所有东西都会被理解/发布,并且似乎没有任何来自乐器的投诉。

初始显示时,我建立了一个MKCoordinateRegion对象,其中心位于我们的第一个针位置,并且(任意)跨度为0.2 x 0.2。然后我打电话:

[mapView setRegion:region animated:YES]; 
[mapView regionThatFits:region]; 

哇!这很好。

同时...我也有一个分段控制,允许移动到每个引脚位置。所以当我点击列表时,地图通过一对setRegion:动画:regionThatFits: ......或者至少这是这个想法,对每个新的针位置进行动画处理。

虽然地图不会“移动”到新的针位置,但地图本身不会在下面更新。相反,我看到我的销在灰色/空白地图背景上...... 直到我轻轻地将地图向任何方向微调。然后地图显示通过! (如果我只在前一个引脚位置的很短距离内移动,通常我会看到地图的任何部分已经加载。)

我怀疑我在这里做了一些愚蠢的事情,但我没有'我们能够弄清楚什么,至少不是来自MapKit文档。也许我使用了错误的电话? (嗯,我确实需要设置区域至少一次,是的?但移动这似乎没有帮助。)我也尝试使用setCenterCoordinate:animated: - 同样的问题。

我在这一点上没有任何假设(没有双关意图)。试图找到我的路。

线索欢迎/赞赏!

UPDATE:调用setRegion:动画:regionThatFits:第一次,其次是setCenterCoordinate:动画:在遍历列表中,没有任何效果。有趣的发现虽然:如果我在这两种情况下更改动画为NO,地图更新!只有当它被设置为YES时。 (哇发生?!是动画:坏了吗?那不可能是...... ???)

回答

6

事实证明,使用SIMULATOR时地图更新不起作用。当我在设备上尝试setCenterCoordinate:animated:时,我在下执行获取底下的地图更新。底线:我相信模拟器在地图更新行为方面与设备相匹配。唉,我错了!学过的知识。 “不要让这发生在你身上。” :)

2

您需要在主线程上下文中调用setRegion:animated:调用。 就这样做:

.... 
[self performSelectorOnMainThread:@selector(updateMyMap) withObject:nil waitUntilDone:NO]; 

} 

-(void) updateMyMap { 
    [myMap setRegion:myRegion animated:YES];  
} 

,它应该在任何情况下(动画与否)工作,与地图下方更新。

+0

谢谢!我只是试过这个,而且......它的工作原理。但是,然后我发现它的工作原理没有进行这个调用。那么改变了什么?那么,事实证明,使用SIMULATOR时地图更新不起作用。当我在设备上尝试时,我会在下面看到地图更新。所以我相信模拟器在地图更新行为等方面与设备相匹配。唉,我错了!学过的知识。 – 2009-07-28 12:12:50

+0

3.1上有类似的问题。这种方法并不能帮助我。我的话题在那里:http://stackoverflow.com/questions/1190270/mkmapview-refresh-after-pin-moves – slatvick 2009-10-07 22:57:51

0

哼怪。即使在模拟器中,地图也会在我的Mac上更新。也许一个网络设置(代理或其他),会阻止地图小部件下载模拟器上的瓷砖?

0

即使这是一个老话题,我认为我会用我的经验。看起来地图动画仅在运行iOS 3.1.x的设备和运行3.1.x的模拟器上失败。如果动画处于开启状态,我的开发人员使用3.1.3的iPod touch将无法缩放。