我有MKMapView
MKUserTrackingBarButtonItem
。用户的当前位置应仅以Follow
或FollowWithHeading
模式显示。实现如下:
- (void)mapView:(MKMapView *)mapView
didChangeUserTrackingMode:(MKUserTrackingMode)mode
animated:(BOOL)animated
{
[mapView setShowsUserLocation:(mode != MKUserTrackingModeNone)];
}
这是我的代码中唯一一个调用setShowsUserLocation
的地方,当按下MKUserTrackingBarButtonItem
时它按预期工作。
通过拖动地图更改UserTrackingMode
时出现问题:在这种情况下,“蓝点”注释会按预期消失,但在大约20%的情况下,拖动结束时会重新出现。
如果我然后测试地图的showsUserLocation
属性,它总是设置为NO,即使“蓝点”注释可见。
如果您知道如何解决这个问题,我将非常感谢您的帮助。
答案 0 :(得分:1)
如果在拖动过程中的某个时间点进入用户位置更新,didUpdateUserLocation
委托方法仍然会触发,即使showsUserLocation
为NO
,蓝点也会重新显示
这似乎是地图视图的缺点。
在showsUserLocation
中切换didUpdateUserLocation
似乎修复了地图视图的内部状态,蓝点消失了:
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if (!mapView.showsUserLocation)
{
mapView.showsUserLocation = YES;
mapView.showsUserLocation = NO;
}
}