我正在显示MKMapView
,其中另一个自定义视图覆盖在顶部(下方的“雷达”)。雷达只是一个静态视图,始终保持居中并且不会调整大小 - 它不是地图注释。这个想法是用户可以滚动和缩放地图,直到雷达覆盖他们感兴趣的区域。
雷达覆盖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。
答案 0 :(得分:2)
根据Apple文档,convert:toRegionFrom:
方法:
将指定视图坐标系中的矩形转换为a 地图区域。
参数
矩形 要转换的矩形。
view作为参考坐标系的视图 rect参数。
所以你真的需要指定你提供坐标作为第二个参数的视图,而不是地图视图:)
所以,我相信如果你把雷达的框架作为第一个参数传递,你应该将雷达视图的父级作为第二个参数传递,并且应该(理论上)工作。
基本上,如果view
是map
(MKMapView
实例)和radar
(雷达视图)是儿童的父视图,我尝试了以下代码:
let frame = radar.frame
let radarRegion = map.convert(frame, toRegionFrom:view)
map.setRegion(radarRegion, animated:true)
在执行上述代码之前,这就是屏幕的样子:
在上面的代码运行之后:
基本区域 正确,但有一点向上移动。
如果这不是您对雷达视图所选区域的期望,那么请您解释一下我可能会遗漏的内容吗?