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 没有被调用
从 MySQL 数据库中提取 MapView 注释的坐标,但没有显示注释?
Android MapView - 没有使用调试 API 密钥加载图块
在 Swift 5/Swiftui 中重构 MapView(没有 Coordinators / UIViewRepresentables)