Ios MKMapView。在移动中创建路径

Ios MKMapView。在移动中创建路径,ios,objective-c,mapkit,Ios,Objective C,Mapkit,我正在尝试在用户路径之后的MKMapView上创建一条线 我发现了这篇相当古老的帖子,我正试图让它像公认的答案中所解释的那样发挥作用: 我们不知道的是如何“提取”前面提到的CLLocation对象数组。现在,我已经设置了mapView设置ShowSuserLocations:是的,它可以很好地更新我的运动,所以我想我可以以某种方式获得CLLocations对象,并持续绘制直线 我现在对iOS仍然很友好,所以要温柔 地图将显示位置pin,但当您的位置发生变化时,它实际上不会通知您。您希望将控制器

我正在尝试在用户路径之后的MKMapView上创建一条线

我发现了这篇相当古老的帖子,我正试图让它像公认的答案中所解释的那样发挥作用:

我们不知道的是如何“提取”前面提到的CLLocation对象数组。现在,我已经设置了mapView设置ShowSuserLocations:是的,它可以很好地更新我的运动,所以我想我可以以某种方式获得CLLocations对象,并持续绘制直线


我现在对iOS仍然很友好,所以要温柔

地图将显示位置pin,但当您的位置发生变化时,它实际上不会通知您。您希望将控制器添加为
CLLocationManager
的代理,并使用
startUpdatingLocation
。然后,您将获得位置更新,您可以保存这些更新并使用它们向地图添加覆盖图。

地图将显示位置pin,但不会在位置更改时实际通知您。您希望将控制器添加为
CLLocationManager
的代理,并使用
startUpdatingLocation
。然后,您将获得可保存并用于向地图添加覆盖的位置更新。

查看的源代码,以获取如何使用MKOverlayView绘制用户路径的示例。它完全符合你的要求,而且效率很高。这是在iOS中开始使用核心位置和mapkit的一个很好的示例应用程序


其思想是让一个符合MKOverlay协议的对象具有用户记录的坐标数组的属性。当用户记录新位置时,您将向该阵列添加坐标。然后,您的MKMapViewDelegate负责为覆盖提供MKOverlayView。然后,MKOverlayView类负责在用户记录的坐标数组中的点之间绘制直线。这发生在MKOverlayView的
drawMapRect:zoomScale:inContext
方法中。注意,您必须特别注意多个线程将调用
drawMapRect:zoomScale:inContext
。如果在添加新坐标时未获得MKOverlay坐标数组的锁定,则几乎肯定会遇到崩溃。请参阅面包屑代码,了解保持
drawMapRect
method线程安全的有效方法。另一种效率较低但简单得多的方法是不直接从MKOVERAYVIEW访问MKOVERAYVIEW的数组,而是传递它的副本。

查看的源代码,以获取如何使用MKOVERAYVIEW绘制用户路径的示例。它完全符合你的要求,而且效率很高。这是在iOS中开始使用核心位置和mapkit的一个很好的示例应用程序


其思想是让一个符合MKOverlay协议的对象具有用户记录的坐标数组的属性。当用户记录新位置时,您将向该阵列添加坐标。然后,您的MKMapViewDelegate负责为覆盖提供MKOverlayView。然后,MKOverlayView类负责在用户记录的坐标数组中的点之间绘制直线。这发生在MKOverlayView的
drawMapRect:zoomScale:inContext
方法中。注意,您必须特别注意多个线程将调用
drawMapRect:zoomScale:inContext
。如果在添加新坐标时未获得MKOverlay坐标数组的锁定,则几乎肯定会遇到崩溃。请参阅面包屑代码,了解保持
drawMapRect
method线程安全的有效方法。另一种效率较低但简单得多的方法是,不要直接从MKOverlayView访问MKOverlay的阵列,而是传递一份副本。

谢谢!所以,当我按照你说的做,并实现委托方法“locationManager:didUpdateLocations:”时,我可以使用收到的CLLocations对象吗?在这个方法中,当委托方法被发送时,“自动”画线?在我调用StopUpdateLocation之前,CLLocationManager是否会一直更新?我想,您可以获取现有覆盖并向其添加一个新的点(目前没有文档)。谢谢!所以,当我按照你说的做,并实现委托方法“locationManager:didUpdateLocations:”时,我可以使用收到的CLLocations对象吗?在这个方法中,当委托方法被发送时,“自动”画线?在我调用StopUpdateLocation之前,CLLocationManager是否会一直更新?我认为,您可以获取现有覆盖并向其添加一个新的点(目前没有文档可供使用)。