Просмотр карты: viewForOverlay: не вызывается

#iphone #mkmapview #mkoverlay

#iPhone #mkmapview #mkoverlay

Вопрос:

Всем привет….. Я знаю, что это дублирующий вопрос, но я все еще не могу заставить его работать, и я уверен, что мне не хватает чего-то простого. Я установил делегат в IB, и вызывается regionDidChange, поэтому я знаю, что делегат MapView подключен. Однако я не могу отобразить какое-либо наложение или даже вызвать метод делегирования. Вот код:

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

self.map.region = MKCoordinateRegionMakeWithDistance(
                                                    newLocation.coordinate, 
                                                    milesToMeters(radius),
                                                    milesToMeters(radius)
                                                    );
self.map.centerCoordinate = newLocation.coordinate;
circle = [MKCircle circleWithCenterCoordinate:newLocation.coordinate radius:50.];    

[self.map addOverlay:circle];
[locationManager stopUpdatingLocation];   

}

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {

NSLog(@"region did change");
}

- (MKOverlayView *)map:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay {
NSLog(@"circling");

if ([overlay isKindOfClass:[MKCirlce class]])

{
MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:overlay] autorelease];
circleView.lineWidth = 1.0;
circleView.strokeColor = [UIColor redColor];

return circleView;
}
return nil;

}
  

Большое спасибо. Jules

Комментарии:

1. Вызывается ли didUpdateToLocation? Вы уверены, что self.map не равен нулю (убедитесь, что его IBOutlet подключен)?

2. Да, вызывается didUpdateLocation и даже viewForAnnotation вызывается, только не viewForOverlay? Это очень странно / …. есть мысли? Большое спасибо

Ответ №1:

viewForOverlay Метод делегирования назван неправильно. Это должно быть:

 - (MKOverlayView *)mapView:(MKMapView *)map 
            viewForOverlay:(id <MKOverlay>)overlay {
  

У него должно быть имя mapView:viewForOverlay: (не map:viewForOverlay: ).

Вы можете изменить имена внутренних параметров, но не имя метода.

Кроме того, внутри вашего viewForOverlay метода MKCirlce должно быть MKCircle .

Комментарии:

1. Большое вам спасибо, я сходил с ума от этого!!