我有一个MKOverlayView
类的工作扩展,mapview 委托完美地触发和执行 – mapView:viewForOverlay
: 委托方法。因此,为了摆脱已弃用的类,我将扩展范围更改MKOverlayView
为 extend MKOverlayRenderer
... 这样做,但将viewForOverlay
方法保留在适当的位置可以正常工作...。
但是,委托方法viewForOverlay
也已弃用,因此我将其替换为rendererForOverlay
与非弃用 API 保持一致的方法,并且它永远不会被触发...
的代表MapView
已正确连接,(viewForOverlay
工作证明了这一点,但是当我用rendererForOverlay
它替换这个方法时,它永远不会触发......因此我的覆盖不会被绘制。这使得对我来说没有意义。
我非常茫然,唯一有效的版本和不有效的版本之间的不同就是这种方法。即使在我将我的类从MKOverlayView
扩展更改为MKOverlayRenderer
扩展之后,只要该viewForOverlay
方法存在于委托中,覆盖仍然会绘制,它就会被调用。但是,当我将viewForOverlay
委托方法替换为rendererForOverlay
nada 方法时。
这是代码:
无论是扩展类还是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;
}