0

我有具有 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

4

0 回答 0