有没有人有任何关于如何使用MKOverlayPathView创buildpath的例子?

我一直在看苹果的iOS类参考文档,不幸的是没有更聪明的。 我已经下载了他们的示例代码KMLViewer但他们已经过度复杂…我真的想知道的是如何生成一个path,并将其添加到MKMapView 。 文档谈到使用CGPathRef ,但没有真正解释如何。

任何人都可以帮助或指出我在正确的方向吗? 谢谢!

这里是如何生成一个path,并将其作为覆盖添加到MKMapView 。 我将使用一个MKPolylineView ,它是MKPolylineView一个子类,屏蔽了您不必引用任何CGPath因为您创build了一个MKPolyline (包含path的数据),并使用它来创buildMKPolylineView (可视化表示的地图上的数据)。

MKPolyline必须用C数组的点( MKMapPoint )或C数组的坐标( CLLocationCoordinate2D )来创build。 MapKit不使用更高级的数据结构,比如NSArray ,这真是一个耻辱,但是这么做! 我将假设你有一个NSArrayNSMutableArrayCLLocation对象来演示如何转换成适合MKPolyline的C数组数据。 这个数组被称为locations ,如何填充它将由您的应用程序决定 – 例如由用户处理触摸位置填充,或填充从Web服务下载的数据等。

在负责MKMapView的视图控制器中:

 int numPoints = [locations count]; if (numPoints > 1) { CLLocationCoordinate2D* coords = malloc(numPoints * sizeof(CLLocationCoordinate2D)); for (int i = 0; i < numPoints; i++) { CLLocation* current = [locations objectAtIndex:i]; coords[i] = current.coordinate; } self.polyline = [MKPolyline polylineWithCoordinates:coords count:numPoints]; free(coords); [mapView addOverlay:self.polyline]; [mapView setNeedsDisplay]; } 

请注意,self.polyline在.h中声明为:

 @property (nonatomic, retain) MKPolyline* polyline; 

这个视图控制器也应该实现MKMapViewDelegate方法:

 - (MKOverlayView*)mapView:(MKMapView*)theMapView viewForOverlay:(id <MKOverlay>)overlay { MKPolylineView* lineView = [[[MKPolylineView alloc] initWithPolyline:self.polyline] autorelease]; lineView.fillColor = [UIColor whiteColor]; lineView.strokeColor = [UIColor whiteColor]; lineView.lineWidth = 4; return lineView; } 

您可以使用fillColor,strokeColor和lineWidth属性来确保它们适合您的应用程序。 我刚刚在这里用一个简单的,适度宽的纯白线。

如果你想从地图上删除path,例如用一些新的坐标来更新它,那么你应该这样做:

 [mapView removeOverlay:self.polyline]; self.polyline = nil; 

然后重复上述过程来创build一个新的MKPolyline并将其添加到地图。

虽然乍一看MapKit看起来有点恐怖和复杂,但是可以很容易地做一些事情,如本例所示。 对于非C程序员来说,唯一可怕的地方就是使用malloc来创build缓冲区,使用数组语法将CLLocationCoordinates复制到缓冲区中,然后释放内存缓冲区。