0

I have MKMapView which have UserTrackingMode = MKUserTrackingModeFollow, and I have adding a circle overlay to show a region of the certain diameter at user location. Also user can change the diameter of the region so I want to scale the map to insure whole region/circle is shown on that portion of the map.

The problem I have now is that scaling the map number of times by setting region results in incorrect user location annotation - it is moved from the correct location.

I cannot understand why is that happens, I see in the debugger that the mapView.userLocation property have correct coordinates.

But once new update is happens or I move the map manually - the annotation jumps to the correct place.

This is the code:

- (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];
}

I have published the video on YouTube to better understand the issue. https://www.youtube.com/watch?v=474gdjkGwJA

Andrey
  • 311
  • 2
  • 13
  • Can you not update the location of your circle overlay when the blue user's GPS dot changes location ? From the video, it seems your circle overlay stays in place even when the user's location changes. – Zhang Jun 01 '13 at 14:07
  • This is the point - the circle location is correct, but the blue point is not. You cannot see it from the code, but _currentLocation is equal to self.mapView.userLocation.location – Andrey Jun 01 '13 at 14:15

0 Answers0