在MKMapView中显示用户位置的不规则行为
我有一个MKUserTrackingBarButtonItem
的MKMapView
。 用户的当前位置应该只显示在Follow
或FollowWithHeading
模式下。 实现如下所示:
- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated { [mapView setShowsUserLocation:(mode != MKUserTrackingModeNone)]; }
这是我的代码中setShowsUserLocation
被调用的唯一地方,它按照MKUserTrackingBarButtonItem
按下时的预期。
当通过拖动地图来改变UserTrackingMode
时,就会出现问题:在这种情况下,“蓝点”注释会按照预期消失,但是在拖动结束时,大约有20%会重新出现。
如果我然后testing地图的showsUserLocation
属性,它始终设置为NO,即使“蓝点”注释是可见的。
如果你知道如何解决这个问题,我会非常感激的。
看起来像是在拖动过程中的某个时间用户位置更新进来, didUpdateUserLocation
委托方法仍然触发,即使showsUserLocation
为NO
,蓝点再次出现。
这似乎是地图视图的一个缺点。
在showsUserLocation
中切换showsUserLocation
似乎修复了地图视图的内部状态,蓝点消失了:
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { if (!mapView.showsUserLocation) { mapView.showsUserLocation = YES; mapView.showsUserLocation = NO; } }