2011-10-27 87 views
4

在我的应用程序中,我使用MKPolyline来跟踪用户的路径。有时(而不是全部时间,我不明白),当一个新的线段被添加到地图中时,整条线闪烁。有时它不会。这是用于添加行的代码:MKOverlay更新闪烁

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数组。 ...对?

+0

那么,当一个新的细分受众群被添加或该应用程序从背景中返回时?也许是两者的结合? –

+0

当从后台返回后添加新段时发生。这是否与从后台线程添加段的事实有关? –

回答

1

这可能不相关,但苹果的确在位置感知编程指南的Managing the Map's Overlay Objects区间状态...

由于地图视图是一个接口项目,到 overlays阵列的任何修改应在 应用程序的主线程上进行同步和执行。

+0

是的,我认为这可能只是问题;当应用程序进入后台时,我遇到了CLLocationManager和线程的其他问题。 –

+0

是的,我认为这解决了问题。尽管如此,我还得做更多的测试来确定它。 –

0

我认为你最好的选择是在向用户显示地图之前尽量使用闪光灯。

请尝试以下之一:

[mapView setNeedsDisplay]; 

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

在您的信息 “viewWillAppear中” 的方法,或AppDelegate.m的 “applicationWillEnterForeground” 的方法把这些。

+0

但问题是它不应该闪烁 - 有时闪烁发生,有时不闪烁。 –