我有一个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;
}