mapView: viewForOverlay: не вызывается - PullRequest
2 голосов
/ 23 мая 2011

Привет всем ..... Я знаю, что это дублирующий вопрос, но я все еще не могу заставить его работать, и я уверен, что упускаю что-то простое. Я установил делегат в 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 Ответ

1 голос
/ 24 мая 2011

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

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

Оно должно иметь имя mapView:viewForOverlay: (не map:viewForOverlay:).

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

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

...