将视图从 MKMapKit 转换为区域

Converting a view from MKMapKit to a region

我正在显示一个 MKMapView,上面覆盖了另一个自定义视图(如下所示 'radar')。雷达只是一个始终保持居中且不会调整大小的静态视图——它不是地图注释。这个想法是用户可以滚动和缩放地图,直到雷达覆盖他们感兴趣的区域。

MKCoordinateRegion 被雷达覆盖的最佳方法是什么?我试过 convert:toRegionFromView: 但我没有看到预期的结果:

print("map region: \(mainView.map.region)") 
// region: MKCoordinateRegion(center: __C.CLLocationCoordinate2D(latitude: 37.132839999999987, longitude: -95.785579999999968), span: __C.MKCoordinateSpan(latitudeDelta: 74.933954323122975, longitudeDelta: 61.276015749875469))

let radarRegion = mainView.map.convert(mainView.radar.frame, toRegionFrom: mainView.map)
print("radar region: \(radarRegion)")
// radar region: MKCoordinateRegion(center: __C.CLLocationCoordinate2D(latitude: 32.559875544717606, longitude: -95.760911716686806), span: __C.MKCoordinateSpan(latitudeDelta: 21.752004541359227, longitudeDelta: 25.901697478812096))

我希望 radarRegion 具有与 map.region 相同的中心坐标和大约一半的跨度。两者都不是真的。

这是复制我的设置的 small project

根据 Apple 文档,convert:toRegionFrom: 方法:

Converts a rectangle in the specified view’s coordinate system to a map region.

Parameters

rect The rectangle you want to convert.

view The view that serves as the reference coordinate system for the rect parameter.

所以你真的需要指定你提供坐标的视图作为第二个参数,而不是地图视图:)

所以,我相信如果您将雷达的框架作为第一个参数传递,您应该将雷达视图的父级作为第二个参数传递,这应该(理论上)有效。

基本上,如果 view 是父视图,而 mapMKMapView 实例)和 radar(雷达视图)是子视图,我尝试了以下代码:

let frame = radar.frame
let radarRegion = map.convert(frame, toRegionFrom:view)
map.setRegion(radarRegion, animated:true)

在执行上面的代码之前,屏幕是这样的:

以上代码运行后:

基本区域正确的,尽管有一点向上移动。

如果这不是您所期望的雷达视图选择的区域,您能解释一下我可能遗漏了什么吗?