将视图从 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
是父视图,而 map
(MKMapView
实例)和 radar
(雷达视图)是子视图,我尝试了以下代码:
let frame = radar.frame
let radarRegion = map.convert(frame, toRegionFrom:view)
map.setRegion(radarRegion, animated:true)
在执行上面的代码之前,屏幕是这样的:
以上代码运行后:
基本区域是正确的,尽管有一点向上移动。
如果这不是您所期望的雷达视图选择的区域,您能解释一下我可能遗漏了什么吗?
我正在显示一个 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
是父视图,而 map
(MKMapView
实例)和 radar
(雷达视图)是子视图,我尝试了以下代码:
let frame = radar.frame
let radarRegion = map.convert(frame, toRegionFrom:view)
map.setRegion(radarRegion, animated:true)
在执行上面的代码之前,屏幕是这样的:
以上代码运行后:
基本区域是正确的,尽管有一点向上移动。
如果这不是您所期望的雷达视图选择的区域,您能解释一下我可能遗漏了什么吗?