主题中的所有内容,下面是代码
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_pathRenderer = [[MKOverlayPathRenderer alloc] init];
_pathRenderer.lineWidth = 8.0f;
_pathRenderer.strokeColor = [UIColor redColor];
_pathRenderer.path = CGPathCreateMutable();
[_mapView addOverlay:_pathRenderer];
}在最后一行中,除例外情况外:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKOverlayPathRenderer boundingMapRect]: unrecognized selector 这意味着我使用了错误的类,没有实现MKOverlay,我得到了它,但是正如在MKOverlayPathRenderer中提到的,它确实实现了。所以我有点困在这个问题上了。
发布于 2014-07-15 12:06:39
MKOverlayPathRenderer不实现MKOverlay协议。
addOverlay需要一个符合MKOverlay协议的对象。
您要给它的对象没有这样做,因此您得到了异常(实现MKOverlay的对象必须有一个boundingMapRect属性)。
在你的问题中,声明:
正如在MKOverlayPathRenderer中提到的,它确实如此
没有道理。
文档并没有说MKOverlayPathRenderer实现了MKOverlay。MKOverlayPathRenderer是MKOverlayRenderer和NSObject的子类。它只符合NSObject协议。
MKOverlayPathRenderer绘制符合MKOverlay的模型覆盖对象的可视化表示。
因此需要两个单独的对象(类似于注释的工作方式):
MKOverlay的东西。MKOverlayRenderer的一些子类(或iOS 7之前的MKOverlayView )。这个过程首先给MKMapView使用addOverlay:或addOverlays:方法的模型对象。
然后,在rendererForOverlay委托方法中,当地图视图实际想要显示一些覆盖时,它将调用该方法,您将为所讨论的覆盖创建并返回一个呈现器(视图)。
创建呈现器的代码通常在rendererForOverlay委托方法中,应该使用initWithOverlay方法(而不是init),并且应该传递要为其创建呈现器的overlay模型对象。
对于addOverlay,您将创建一些覆盖模型对象--一些标准类,如MKPolyline、MKPolygon、MKCircle或自定义类。
但是你确定你需要一个MKOverlayPathRenderer**?** ()吗
如果您只想绘制一条简单的线、圆或多边形,请使用已经为您自动绘制这些对象的渲染器。您将有一个比创建您自己的MKOverlayPathRenderer子类容易得多的时间。
MKPolylineRenderer、MKPolygonRenderer和MKCircleRenderer是MKOverlayPathRenderer的内置子类,它们可以绘制相关的模型覆盖,而无需编写任何绘图代码。
https://stackoverflow.com/questions/24755462
复制相似问题