我需要一种将 MKUserLocation 转换为 CLLocation 的方法,以便我可以使用 swift 中的 distanceFromLocation 方法找到用户位置与另一个预定义的 CLLocation 之间的距离。
问问题
2452 次
3 回答
4
MKUserLocation 有属性 location,它恰好是 CLLocation 类型。
但是,您需要先做好几件事。
- 您需要询问用户是否允许使用他们的位置。这包括调用 CLLocationManager 的 requestWhenInUseAuthorization 并检查异步结果。
- 将 NSLocationWhenInUseUsageDescription 条目添加到您的信息(在上面的链接中描述)以告诉用户您想对信息做什么
- 您很可能需要异步获取位置。为此,您的视图控制器需要实现 MKMapViewDelegate 并且您将使用 func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) 来获取用户位置。
于 2015-02-22T19:33:17.470 回答
1
我认为您是从 mapView 获取您的 MKUserLocation 吗?
因此,您必须按照以下步骤操作:
- 确保您拥有显示用户位置的用户和系统权限
- 在您的 mapView 上显示用户位置后,将您的控制器设置为 mapView 委托。
实现方法:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
// Code - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { [userLocation.location distanceFromLocation:_yourOtherLocation]; }
于 2015-06-10T08:00:29.393 回答
0
Xcode 6.4,适用于 iOS 8.4,启用 ARC
好的答案已经在这里发布;但是,没有人在 swift 中给出具体的例子。这里有几件事要记住:
MKUserLocation 类定义了标识用户当前位置的特定类型的注释。您不直接创建此类的实例。相反,您从应用程序中显示的地图视图的 userLocation 属性中检索现有的 MKUserLocation 对象。
location 属性是只读的!
var location: CLLocation! { get }
所以使用这个属性可以直接使用 distanceFromLocation:,但是不要使用当前用户的位置,因为它显然会返回 0 米。您很可能必须初始化一个新的 CLLocation 来测量。
func distanceFromLocation(_ location: CLLocation!) -> CLLocationDistance
希望这可以帮助!干杯。
于 2015-07-29T16:31:07.550 回答