MKMapView中showsUserLocation的不稳定行为

时间:2011-12-19 00:10:33

标签: ios ios5 mkmapview

我有MKMapView MKUserTrackingBarButtonItem。用户的当前位置应仅以FollowFollowWithHeading模式显示。实现如下:

- (void)mapView:(MKMapView *)mapView 
didChangeUserTrackingMode:(MKUserTrackingMode)mode 
       animated:(BOOL)animated
{
    [mapView setShowsUserLocation:(mode != MKUserTrackingModeNone)]; 
}

这是我的代码中唯一一个调用setShowsUserLocation的地方,当按下MKUserTrackingBarButtonItem时它按预期工作。

通过拖动地图更改UserTrackingMode时出现问题:在这种情况下,“蓝点”注释会按预期消失,但在大约20%的情况下,拖动结束时会重新出现。

如果我然后测试地图的showsUserLocation属性,它总是设置为NO,即使“蓝点”注释可见。

如果您知道如何解决这个问题,我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果在拖动过程中的某个时间点进入用户位置更新,didUpdateUserLocation委托方法仍然会触发,即使showsUserLocationNO,蓝点也会重新显示

这似乎是地图视图的缺点。

showsUserLocation中切换didUpdateUserLocation似乎修复了地图视图的内部状态,蓝点消失了:

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if (!mapView.showsUserLocation)
    {
        mapView.showsUserLocation = YES;
        mapView.showsUserLocation = NO;
    }
}