mapView:viewForOverlay:没有被调用

Posted

技术标签:

【中文标题】mapView:viewForOverlay:没有被调用【英文标题】:mapView:viewForOverlay: not getting called 【发布时间】:2011-05-23 16:16:53 【问题描述】:

嘿所有.....我知道这是一个重复的问题,但我仍然无法让它工作,我确定我错过了一些简单的东西。我已经在 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;


非常感谢。朱尔斯

【问题讨论】:

是否调用了 didUpdateToLocation?你确定 self.map 不为零(确保其 IBOutlet 已连接)? 是的,didUpdateLocation 被调用,甚至 viewForAnnotation 被调用,只是没有 viewForOverlay?它很奇怪/....有什么想法吗?非常感谢 【参考方案1】:

viewForOverlay 委托方法命名不正确。应该是:

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

它必须命名为mapView:viewForOverlay:(而不是map:viewForOverlay:)。

您可以更改内部参数名称,但不能更改方法名称。

另外,在您的 viewForOverlay 方法中,MKCirlce 应该是 MKCircle

【讨论】:

非常感谢,我为此发疯了!

以上是关于mapView:viewForOverlay:没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

- (MKAnnotationView *)mapView 没有被调用

MapView 相机在 iOS Swift 中没有改变

从 MySQL 数据库中提取 MapView 注释的坐标,但没有显示注释?

Android MapView - 没有使用调试 API 密钥加载图块

管理 MapView 的缓存

在 Swift 5/Swiftui 中重构 MapView(没有 Coordinators / UIViewRepresentables)