2017-03-28 62 views
1

我正在顯示一個MKMapView,並在上面覆蓋了另一個自定義視圖(下面的「雷達」)。雷達只是一個靜態視圖,始終保持居中,不會調整大小 - 它不是地圖註釋。我們的想法是,用戶可以滾動和縮放地圖,直到雷達覆蓋他們感興趣的區域。將視圖從MKMapKit轉換爲區域

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複製我的設置。

回答

2

根據蘋果文檔,convert:toRegionFrom:方法:

指定的視圖的座標系中的矩形轉換爲 地圖區域。

參數

矩形 要轉換的矩形。

視圖作爲參考座標系 rect參數的視圖。

所以,你真的需要指定您如果在幀傳送的雷達作爲提供作爲第二個參數,而不是地圖視圖:)

所以,我相信座標圖第一個參數,你應該通過雷達視圖的父母作爲第二個參數,應該(理論上)工作。

基本上,如果view是父視圖,其map(所述MKMapView實例)和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

基本區域正確雖然有向上移動一點點。

如果這不是您對雷達視圖所選區域的預期,請您解釋一下我可能會丟失什麼?

+0

謝謝@Fahim,我給了那一槍,但我沒有看到太多的改善。至於層次結構,'mainView'是一個'UIView',包含'mapView'和'radar'。我嘗試了'mainView.map.convert(mainView.radar.frame,toRegionFrom:mainView.map)'和'mainView.map.convert(mainView.radar.frame,toRegionFrom:mainView.radar)''但仍然沒有看到我' d期望。 –

+0

但是'mainView.map'不適合第二個參數,對嗎?我相信它應該是'mainView',因爲radar.frame將在'mainView'座標中,所以不應該是'mainView.map.convert(mainView.radar.frame,toRegionFrom:mainView)'? – Fahim

+0

唉,也不行。你認爲這將有助於添加我嘗試過的每種組合的結果嗎? –