- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我一直在查看 Apple 的 iOS Class Reference 文档,但不幸的是,我并不了解。我已经下载了他们的示例代码 KMLViewer
,但他们把它弄得太复杂了……我真正想知道的是如何生成路径并将其添加到 MKMapView
。文档谈到了使用 CGPathRef
,但并未真正解释如何使用。
最佳答案
下面介绍了如何生成路径并将其作为覆盖层添加到 MKMapView
。我将使用 MKPolylineView
,它是 MKOverlayPathView
的子类,使您不必引用任何 CGPath
,因为您创建了MKPolyline
(包含路径数据)并使用它来创建 MKPolylineView
( map 上数据的可视化表示)。
必须使用 C 数组点 (MKMapPoint
) 或 C 数组坐标 (CLLocationCoordinate2D
) 创建 MKPolyline
。遗憾的是 MapKit 没有使用更高级的数据结构,例如 NSArray
,但就这样吧!我将假设您有一个 NSArray
或 NSMutableArray
的 CLLocation
对象来演示如何将数据转换为适合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/
我一直在查看 Apple 的 iOS Class Reference 文档,但不幸的是,我并不了解。我已经下载了他们的示例代码 KMLViewer,但他们把它弄得太复杂了……我真正想知道的是如何生成路
我在修改 Breadcrumb 示例时遇到了一些不一致之处,以使 CrumbPathView 从 MKOverlayPathView 子类化(就像它应该的那样),而不是从 MKOverlayView
我正在开发一个应用程序,我想在其中显示往返机场的虚构飞机。这可能不是我想在 map 上飞翔的唯一东西。 为此,我使用了来自 LocationReminders 的示例代码(他们拥有的 MKOverla
是否有人尝试子类化 MKOverlayPathView,以便从本质上重新创建对路径绘制有更多控制的 MKPolylineView?如果是这样,您愿意分享一些示例代码吗? 我想在 map View 上绘
任何人都可以回答以下两个问题中的任何一个 1) 如果我根据 MKOverlayPathView 中的 ZoomScale 动态调整覆盖对象的大小,当不知道 ZoomScale 是什么时,如何确保 MK
我是一名优秀的程序员,十分优秀!