MKMapView 和 setRegion:animated: 不更新地图视觉效果

Posted

技术标签:

【中文标题】MKMapView 和 setRegion:animated: 不更新地图视觉效果【英文标题】:MKMapView and setRegion:animated: not updating the map visuals 【发布时间】:2009-07-08 00:14:11 【问题描述】:

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

情况是这样的。我有一个 MKMapView 对象,其中我添加了一组大约十个 MKPinAnnotation 对象。到现在为止还挺好。一切都被合理地分配/释放,似乎没有来自 Instruments 的任何投诉。

在初始显示时,我设置了一个 MKCoordinateRegion 对象,其中心点位于我们的第一个引脚位置,(任意)跨度为 0.2 x 0.2。然后我打电话:

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

哇!效果很好。

同时...我还有一个分段控件,可以移动到每个引脚位置。因此,当我点击列表时,地图会通过一对新的对 setRegion:animated:regionThatFits: 的调用来动画到每个新的 pin 位置...或至少就是这样。

虽然地图会“移动”到新的大头针位置,但地图本身不会在下方更新。相反,我在灰色/空白地图背景上看到了我的图钉……直到我向任何方向轻推地图,无论多么轻微。然后地图显示通过! (如果我只是在上一个图钉位置的短距离内移动,我通常会看到地图的任何部分已经加载。)

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

我在这一点上没有任何假设(没有双关语)。只是想找到我的路。

欢迎/赞赏线索!

更新:第一次调用 setRegion:animated:regionThatFits:,然后在遍历列表时调用 setCenterCoordinate:animated:没有效果。不过有趣的发现:如果我在这两种情况下都将动画更改为 NO,则地图会更新!!!仅当它设置为 YES 时。 (发生了什么?!动画:坏了?那不可能……???)

【问题讨论】:

【参考方案1】:

原来使用模拟器时地图更新不起作用。当我在设备上尝试 setCenterCoordinate:animated: 时,我确实在下面得到了地图更新。

底线:我相信模拟器会在地图更新行为方面与设备相匹配。唉,我错了!学过的知识。 “不要让这种事情发生在你身上。” :)

【讨论】:

【参考方案2】:

您需要在主线程上下文中调用setRegion:animated:。 只需执行以下操作:

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



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

它应该在任何情况下都可以工作(无论是否有动画),并且地图会在下面更新。

【讨论】:

谢谢!我刚试过这个,而且......它有效。但是,我随后发现它也可以在不进行此调用的情况下工作。那么发生了什么变化?好吧,事实证明,使用模拟器时地图更新不起作用。当我在设备上尝试时,我会在下面得到地图更新。所以我相信模拟器会在地图更新行为等方面与设备相匹配。唉,我错了!经验教训。 在 3.1 上有类似的问题。这种方法对我没有帮助。我的话题在那里:***.com/questions/1190270/…【参考方案3】:

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

【讨论】:

确实很奇怪!我不确定我会在网络方面设置什么,因为只需轻轻推动地图,然后 - ta-dah - 就在那里。我会说“我正在使用 3.0 环境”,但后来我才意识到 MKMapView 只能从 3.0b 开始使用,所以不可能。 :\【参考方案4】:

尽管这是一个古老的话题,但我想我会用我的经验来回应。似乎地图动画仅在运行 ios 3.1.x 的设备和运行 3.1.x 的模拟器上失败。如果动画打开,我的开发 iPod touch 3.1.3 无法缩放。

【讨论】:

以上是关于MKMapView 和 setRegion:animated: 不更新地图视觉效果的主要内容,如果未能解决你的问题,请参考以下文章

MKMapView、Google Maps API 和交通信息

UITableView 中的 MKMapView 和编辑

MKMapView 和注释隐藏与缩放

使用 MKMapView、核心位置和核心数据

防止 MKMapView 不断地重新缩放和重新居中到用户位置

MKMapView 缩放和区域