从MKOverlayView更新到MKOverlayRenderer后,没有调用rendererForOverlay ....

时间:2014-05-12 13:46:53

标签: objective-c mkmapview renderer mkoverlay mkmapviewdelegate

我有一个MKOverlayView类的工作扩展,mapview委托完全触发并执行 - mapView:viewForOverlay:委托方法。因此,为了摆脱已弃用的课程,我更改了MKOverlayView的扩展以扩展MKOverlayRenderer ...这样做,但保留viewForOverlay方法可以正常工作....

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

MapView的代表已正确连接(viewForOverlay工作证明了这一点,但当我用rendererForOverlay取代此方法时,它是替代品,它永远不会永远都会触发......因此我的叠加层不会被绘制出来。这对我来说毫无意义。

我非常感到茫然,唯一有用的版本和不支持版本的版本是这种方法。即使我将我的类从MKOverlayView扩展更改为MKOverlayRenderer扩展,只要委托中存在viewForOverlay方法,覆盖仍会绘制,它会被调用。但是,我替换了viewForOverlay方法nada的rendererForOverlay委托方法。

以下是代码:

无论类MapOverlayView是在扩展MKOverlayView还是MKOverlayRenderer,这个方法都可以正常工作,并调用此委托方法并渲染叠加层。

-(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;
 }

1 个答案:

答案 0 :(得分:0)

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