2016-09-13 4 views
1

マップ上にアノテーションをいくつか作成しようとしています。しかし、それを回避することはできません。私が使用しているコードは地図上にアノテーションを追加するスウィフト

// Names 
names = ["Ben", "Big", "Hawk", "Enot", "Wiltons", "Scott's", "The Laughing"] 

     // Latitudes, Longitudes 
     coordinates = [ 
      [51.519066, -0.135200], 
      [51.513446, -0.125787], 
      [51.465314, -0.214795], 
      [51.507747, -0.139134], 
      [51.509878, -0.150952], 
      [51.501041, -0.104098], 
      [51.485411, -0.162042], 
      [51.513117, -0.142319] 
     ] 
+0

これはちょうどデータ構造のように見えます。アノテーションをマップビューに実際に追加しようとしたことは何ですか?マップビューを作成するにはどうすればよいですか? – Losiowaty

+1

試行を表示する必要があります。あなたはどのマップを使用していますか? – Larme

+0

mapviewはユーザーの所在地(彼の方法で作成されたもの:https://www.youtube.com/watch?v=qrdIL44T6FQ)に従っていますが、これらを地図上のアノテーションとしてのみ入れたいと思います。私は文字列でしようとしましたが、何も起こりませんでした.. var names:[文字列]! var description:[文字列]! var座標:[AnyObject]! var currentRestaurantIndex:Int = 0 var LocationManager = CLLocationManager() – Adam

答えて

6

あなたは本当にあまり試していません。しかし、これを見てください。関数addAnnotationはCLLocation型の配列をとります。これはあなたが使用すべきものです。 CLLocationオブジェクトを初期化するには、このように配列を作成します。私はすでになどの作業にレンダリングマップ、MapViewのオブジェクト、ここ

let coords = [ CLLocation(latitude: xxxx, longitude: xxxx), 
    CLLocation(latitude: xxx, longitude: xxx), 
    CLLocation(latitude: xxx, longitude:xxx) 
    ]; 

を持っていると仮定し、その配列を取ることができます関数であり、各要素をループし、まだレンダリングされていないのMapView(に注釈として追加します)

func addAnnotations(coords: [CLLocation]){ 
     for coord in coords{ 
      let CLLCoordType = CLLocationCoordinate2D(latitude: coord.coordinate.latitude, 
                 longitude: coord.coordinate.longitude); 
      let anno = MKPointAnnotation(); 
      anno.coordinate = CLLCoordType; 
      mapView.addAnnotation(anno); 
     } 

    } 

は最後に、あなたは新しいアノテーションが追加されたとき、その自動的に呼び出されるメソッドのいずれかを使用するMKMapViewDelegateデリゲートを使用する必要があるので、我々はそれをキューイングしてレンダリングすることができます。注釈を一度追加する場合はこれは不要ですが、後でそれらを操作できるように、注釈を追加するとよいでしょう。

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    if annotation is MKUserLocation{ 
     return nil; 
    }else{ 
     let pinIdent = "Pin"; 
     var pinView: MKPinAnnotationView; 
     if let dequeuedView = mapView.dequeueReusableAnnotationViewWithIdentifier(pinIdent) as? MKPinAnnotationView { 
      dequeuedView.annotation = annotation; 
      pinView = dequeuedView; 
     }else{ 
      pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: pinIdent); 

     } 
     return pinView; 
    } 
} 

このコードを追加して動作させるだけでなく、プロジェクトの適切な領域に正しく組み込むようにしてください。さらなる質問がある場合はコメントをしてください。

UPDATE:

あなたが使用してコントローラにMKMapViewDelegateプロトコルを継承することを忘れないでください。

addAnnotationsViewDidLoadに実際に呼び出し、coords配列を渡してください。 ViewDidLoadで定義できます。

mapViewメソッドがViewDidLoadではなくコントローラのメンバであることを確認してください。

+0

私はコードを使用し、値を正しいものに変更しました。しかし、私は(不変の価値 "coords"は使用されていない)取得しています。私はviewdidloadの最初のコードを入れて、それは正しいですか、私は絶対に失われていますか? – Adam

+0

関数addAnnotationを呼び出し、配列を引数として渡す必要があります。 –

+0

私は念頭に置くべきもののリストを使って自分の答えを更新するつもりです。 –

関連する問題