2017-03-28 1 views
1

MKMapViewを上に重ねた別のカスタムビュー(下の「レーダー」)を重ねて表示しています。レーダーは、常に中央に置かれ、サイズ変更されない静的ビューです。マップアノテーションではありません。アイデアは、ユーザーがスクロールして、レーダーは、彼らが興味を持っている領域を覆うまで、マップをズームすることができるということです。ビューをMKMapKitから地域に変換する

enter image description here

レーダーでカバーMKCoordinateRegionを取得するための最良の方法は何? map.regionのこれらの、

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を期待する、とスパン約半分:私はconvert:toRegionFromView:試してみたが、私は私が期待する結果が表示されません。どちらも当てはまりません。

ここには、私のセットアップを複製するsmall projectがあります。

答えて

2

アップル社のマニュアルによれば、convert:toRegionFrom:方法

は マップ領域に指定されたビューの座標系における矩形を変換します。

パラメータ

RECT 変換したいの長方形。

view rectパラメータの参照座標系として機能するビュー。

だから、本当にマップビュー、あなたは2番目のパラメータとして座標を提供するためのビューを指定する必要はありません:)

ですからとしてレーダーのためのフレームに渡すと、私は信じています最初のパラメータでは、レーダービューの親を2番目のパラメータとして渡す必要があり、それは(理論的に)動作するはずです。 、上記のコードが実行された前

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

viewが子供であるかをmapMKMapViewインスタンス)とradar(レーダービュー)の親ビューである場合

は基本的に、私は、次のコードを試してみました

enter image description here

そして、上記のコードの後に​​実行されます:これは画面がどのように見えるかです

enter image description here

シフトアップの少しがあるが、基本的な領域正しいです。

これがレーダー表示で選択された地域に関して期待していたものでない場合は、私が何が欠けているかも説明してください。

+0

ありがとう@ファヒム、私はそのショットを与えたが、私は多くの改善を見ていない。階層に関しては、 'mainView'は' mapView'と 'radar'の両方を含む' UIView'です。私は 'mainView.map.convert(mainView.radar.frame、toRegionFrom:mainView.map)'と 'mainView.map.convert(mainView.radar.frame、toRegionFrom:mainView.radar)'を試みましたが、期待しています。 –

+0

しかし、 'mainView.map'は2番目のパラメータにとって正しいものではありませんか? radar.frameは 'mainView'座標にあるので' mainView'とすべきだと思いますので、 'mainView.map.convert(mainView.radar.frame、toRegionFrom:mainView)'ではないでしょうか? – Fahim

+0

ああ、また動作しません。私が試したそれぞれの組み合わせの結果を追加するのはどんな使い方になると思いますか? –

関連する問題