0

我有一个MKOverlayView类的工作扩展,mapview 委托完美地触发和执行 – mapView:viewForOverlay: 委托方法。因此,为了摆脱已弃用的类,我将扩展范围更改MKOverlayView为 extend MKOverlayRenderer... 这样做,但将viewForOverlay方法保留在适当的位置可以正常工作...。

但是,委托方法viewForOverlay也已弃用,因此我将其替换为rendererForOverlay与非弃用 API 保持一致的方法,并且它永远不会被触发...

的代表MapView已正确连接,(viewForOverlay工作证明了这一点,但是当我用rendererForOverlay它替换这个方法时,它永远不会触发......因此我的覆盖不会被绘制。这使得对我来说没有意义。

我非常茫然,唯一有效的版本和不有效的版本之间的不同就是这种方法。即使在我将我的类从MKOverlayView扩展更改为MKOverlayRenderer扩展之后,只要该viewForOverlay方法存在于委托中,覆盖仍然会绘制,它就会被调用。但是,当我将viewForOverlay委托方法替换为rendererForOverlaynada 方法时。

这是代码:

无论是扩展类还是MapOverlayView扩展类,此方法都可以正常工作,并且调用此委托方法并呈现覆盖。MKOverlayViewMKOverlayRenderer

-(MKOverlayView*)mapView:(MKMapView*)mapView viewForOverlay:(id<MKOverlay>) overlay{
 MyMapOverlay *mapOverlay = overlay;
 MapOverlayView *mapOverlayView = [[MapOverlayView alloc] initWithOverlay:mapOverlay];
 return mapOverlayView;
 }

对于这个方法,我确保MapOverlayView它总是在扩展MKOverlayRenderer,但委托方法永远不会被触发。为什么上面不推荐使用的方法总是被调用和工作,但下面正确的非不推荐使用的方法永远不会被触发?

-(MKOverlayRenderer*)mapView:(MKMapView*)mapView rendererForOverlay:(id<MKOverlay>) overlay{
 MyMapOverlay *mapOverlay = overlay;
 MapOverlayView *mapOverlayView = [[MapOverlayView alloc] initWithOverlay:mapOverlay];
 return mapOverlayView;
 }
4

1 回答 1

0

我发现当 Overlay 对象位于显示地图边界内时,会调用 rendererForOverlay 方法。您需要将地图滚动到应显示叠加层的位置以触发呼叫。

于 2017-03-03T19:18:28.817 回答