在MKMapView中显示用户位置的不规则行为

我有一个MKUserTrackingBarButtonItemMKMapView 。 用户的当前位置应该只显示在FollowFollowWithHeading模式下。 实现如下所示:

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

这是我的代码中setShowsUserLocation被调用的唯一地方,它按照MKUserTrackingBarButtonItem按下时的预期。

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

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

如果你知道如何解决这个问题,我会非常感激的。

看起来像是在拖动过程中的某个时间用户位置更新进来, didUpdateUserLocation委托方法仍然触发,即使showsUserLocationNO ,蓝点再次出现。

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

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

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