gpt4 book ai didi

ios - 如何使用 MKOverlayPathView 创建路径?

转载 作者:技术小花猫 更新时间:2023-10-29 10:15:57 25 4
gpt4 key购买 nike

我一直在查看 Apple 的 iOS Class Reference 文档,但不幸的是,我并不了解。我已经下载了他们的示例代码 KMLViewer,但他们把它弄得太复杂了……我真正想知道的是如何生成路径并将其添加到 MKMapView。文档谈到了使用 CGPathRef,但并未真正解释如何使用。

最佳答案

下面介绍了如何生成路径并将其作为覆盖层添加到 MKMapView。我将使用 MKPolylineView,它是 MKOverlayPathView 的子类,使您不必引用任何 CGPath,因为您创建了MKPolyline(包含路径数据)并使用它来创建 MKPolylineView( map 上数据的可视化表示)。

必须使用 C 数组点 (MKMapPoint) 或 C 数组坐标 (CLLocationCoordinate2D) 创建 MKPolyline。遗憾的是 MapKit 没有使用更高级的数据结构,例如 NSArray,但就这样吧!我将假设您有一个 NSArrayNSMutableArrayCLLocation 对象来演示如何将数据转换为适合MKPolyline。这个数组被称为 locations 并且你如何填充它将由你的应用程序决定 - 例如通过处理用户的触摸位置来填充,或者填充从网络服务下载的数据等。

在负责 MKMapView 的 View Controller 中:

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;

这个 View Controller 还应该实现 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 属性来确保它们适合您的应用程序。我在这里使用了一条简单的、宽度适中的纯白线。

如果你想从 map 中删除路径,例如用一些新坐标更新它,然后你会这样做:

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

然后重复上述过程,创建一个新的MKPolyline并添加到 map 中。

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

关于ios - 如何使用 MKOverlayPathView 创建路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com