我有具有 UserTrackingMode = MKUserTrackingModeFollow 的 MKMapView,并且我添加了一个圆形叠加层以在用户位置显示特定直径的区域。用户还可以更改区域的直径,因此我想缩放地图以确保整个区域/圆圈显示在地图的该部分。
我现在遇到的问题是,通过设置区域来缩放地图次数会导致用户位置注释不正确——它是从正确的位置移动的。
我不明白为什么会发生这种情况,我在调试器中看到 mapView.userLocation 属性具有正确的坐标。
但是一旦发生新的更新或我手动移动地图 - 注释会跳转到正确的位置。
这是代码:
- (void)addCircleWithRadius:(double)radius andCoordinate:(CLLocationCoordinate2D)coordinate
{
_regionCircle = [MKCircle circleWithCenterCoordinate:coordinate radius:radius];
[_regionCircle setTitle:@"Region"];
MKCoordinateRegion region;
region.center.latitude = coordinate.latitude;
region.center.longitude = coordinate.longitude;
region.span.latitudeDelta = 0.00002 * _regionCircle.radius;
region.span.longitudeDelta = 0.00002 * _regionCircle.radius;
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits: region];
[self.mapView setRegion:adjustedRegion animated:TRUE];
_circleView = nil;
[self.mapView addOverlay:_regionCircle];
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if(!_circleView)
{
_circleView = [[MKCircleView alloc] initWithCircle:overlay];
_circleView.strokeColor = [UIColor blueColor];;
_circleView.fillColor = [UIColor blueColor];
_circleView.alpha = 0.25;
_circleView.lineWidth = 2.0;
}
return _circleView;
}
- (IBAction)regionSliderValueChanged:(id)sender
{
[self updateRadiusCircle];
}
- (void) updateRadiusCircle
{
[self.mapView removeOverlays:self.mapView.overlays];
CLLocationCoordinate2D myCoordinate = {_currentLocation.coordinate.latitude, _currentLocation.coordinate.longitude};
[self addCircleWithRadius:self.radiusSlider.value andCoordinate:myCoordinate];
}
我已在 YouTube 上发布视频以更好地了解该问题。 https://www.youtube.com/watch?v=474gdjkGwJA