将视图从MKMapKit转换为区域

时间:2017-03-28 03:14:06

标签: ios uiview mkmapview mapkit

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

enter image description here

雷达覆盖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

1 个答案:

答案 0 :(得分:2)

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

  

将指定视图坐标系中的矩形转换为a   地图区域。

     

参数

     

矩形   要转换的矩形。

     

view作为参考坐标系的视图   rect参数。

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

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

基本上,如果viewmapMKMapView实例)和radar(雷达视图)是儿童的父视图,我尝试了以下代码:

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

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

enter image description here

在上面的代码运行之后:

enter image description here

基本区域 正确,但有一点向上移动。

如果这不是您对雷达视图所选区域的期望,那么请您解释一下我可能会遗漏的内容吗?