Я не понял ответа Бенвада. Так вот, более понятный ответ :
Довольно просто добавить круг. Соответствует MKMapViewDelegate
@interface MyViewController : UIViewController <MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
В viewDidLoad создайте аннотацию круга и добавьте ее на карту:
CLLocationCoordinate2D center = {39.0, -74.00};
// Add an overlay
MKCircle *circle = [MKCircle circleWithCenterCoordinate:center radius:150000];
[self.mapView addOverlay:circle];
Затем реализуйте mapView: viewForOverlay: для возврата представления.
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
[circleView setFillColor:[UIColor redColor]];
[circleView setStrokeColor:[UIColor blackColor]];
[circleView setAlpha:0.5f];
return circleView;
}
Но если вы хотите, чтобы круг всегда был одинакового размера, независимо от уровня масштабирования, вам придется сделать что-то другое. Как вы говорите, в regionDidChange: animated :, получите latitudeDelta, затем создайте новый круг (с радиусом, который соответствует ширине), удалите старый и добавьте новый.
Примечание от меня: не забудьте связать mapview с вашим представителем контроллера представления. В противном случае viewForOverlay не будет вызываться.