MKOverlay更新闪烁

4

在我的应用中,我使用MKPolyline来跟踪用户的路径。有时(并非每次,我不明白原因),当一个新的线段被添加到地图上时,整条线会闪烁。有时它不会。以下是用于添加线的代码:

CLLocationCoordinate2D coords[2];

coords[0] = CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude);

coords[1] = CLLocationCoordinate2DMake(oldLocation.coordinate.latitude, oldLocation.coordinate.longitude);

MKPolyline* line = [MKPolyline polylineWithCoordinates:coords count:2];

[mapView addOverlay:line];

我有所遗漏吗?

编辑:这通常发生在应用程序从后台返回时。尽管我只是添加了一个覆盖层,而不是修改整个mapView.overlays数组,但我不确定为什么会出现这种情况。......对吗?


这是当一个新的段落被添加时,还是当应用程序从后台返回时?也许两者的结合? - Mark Adams
当从后台返回时添加新的片段时会发生这种情况。这是否与从后台线程添加片段有关? - eric.mitchell
2个回答

1
这可能与此无关,但是在位置感知编程指南的管理地图叠加对象部分中,Apple确实声明...

由于地图视图是一个界面项,因此对overlays数组的任何修改都应该在应用程序的主线程上进行同步和执行。


是的,我认为那可能就是问题所在;当应用程序进入后台时,我曾经遇到过CLLocationManager和线程方面的其他问题。 - eric.mitchell
是的,我认为这解决了问题。不过我还需要进行几次测试来确保它。 - eric.mitchell

0

我认为你最好的选择是在向用户展示地图之前尝试完成闪存操作。

请尝试以下方法之一:

[mapView setNeedsDisplay];

或者

if ([[mapView overlays] count] > 0){
    [[[mapView overlays] lastObject] setNeedsDisplay];
}

将这些代码放在你的“viewWillAppear”方法或者AppDelegate.m文件中的“applicationWillEnterForeground”方法中。


但问题在于它根本不应该闪烁 - 有时会出现闪烁,有时则不会。 - eric.mitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接