我有一个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;
}
答案 0 :(得分:0)
我发现当Overlay对象在显示地图边界内时,会调用rendererForOverlay方法。您需要将地图滚动到应显示叠加层的位置以触发呼叫。