2017-04-26 6 views
1

マップ上でどのマーカーが押されたかを検出する方法。私はいくつかのデータが含まれている、APIからダウンロードされたマーカー配列のマップとクラスマーカー上のマーカーがほとんどありません。例えばGMSMarkerのインデックスをタップするにはどうすればよいですか?

私はデータが含まれているマーカーをタップすると、私はインデックス0を取得し、どうすればよいのデータ1が含まれているマーカーの上に(States(name: "text1", long: 110.42400399999997,lat: -7.0343237999999992)

をタップすると、私はこの

[States(name: "text1", long: 110.42400399999997,lat: -7.0343237999999992), 
States(name: "text2", long: 110.42769829999997, lat: -7.0856947999999997), 
States(name: "text3", long: 110.42922440000007, lat: -7.3250846999999997), 
States(name: "text4", long: 117.11625830000003, lat: -0.50436380000000003), 
States(name: "text5", long: 110.43093620000002, lat: -7.0730081999999994)] 

のようなデータを持っています2、どうすればインデックス1を取得できますか?

答えて

3

だから私はあなたがこのような配列を反復処理によりマーカーを追加するとします。

for state in states { // assuming states is the array you showed in the question 
    let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: state.lat, longitude: state.long)) 
    // configure the marker... 
    marker.map = mapView 
} 

アイデアは、あなたがそれを作成した直後に、同様の配列にマーカーを追加することです。データの順序でマーカーを作成したので、マーカーを含む配列内の各項目は同じインデックスのデータに対応します。

のは、クラスレベルでのマーカーの配列を宣言してみましょう:

var markers = [GMSMarker]() 

そして、上記のためのループでは、markersにマーカーを追加します。

markers.append(marker) 

今、あなたがタップされた基準を見つけることができますちょうど:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 
    if let index = markers.index(of: marker) { 
     let tappedState = states[index] 
    } 
} 
+0

大変ありがとうございました!できます! –

関連する問題