2017-05-29 3 views
0

私のコードでは、アップルマップを使用しており、View Controller内でマップビューとデリゲートを正しく設定しています。MKAnnotationViewをカスタマイズできないのはなぜですか?

は私のViewControllerの中で私はまた、forループ内で次のコードを持っている:

if userOnMapAlready == false { 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = CLLocationCoordinate2D(latitude: otherUserLocation.coordinate.latitude, longitude: otherUserLocation.coordinate.longitude) 
    annotation.subtitle = otherUserUUID 
    self.mapView.addAnnotation(annotation) 

} 

私も自分のビューコントローラで、次のデリゲートの機能を持っており、再びビューコントローラ内mapview.delegate =自己を設定しています:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
     if annotation is MKUserLocation { 
      //return nil so map view draws "blue dot" for standard user location 
      return nil 
     } 

     let reuseId = "pin" 

     var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView 
     if pinView == nil { 
      pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
      pinView!.canShowCallout = true 
      pinView!.animatesDrop = true 
      pinView!.pinColor = .purple 
     } 
     else { 
      pinView!.annotation = annotation 
     } 

     return pinView 

    } 

は、悲しいことに、ピンが、彼らはすべてのviewForAnnotationのような紫、赤ではありません描かれていたときに、彼らがする必要があります示唆しています。何が問題ですか?!ユニークな字幕と一致しない再利用とは何か?それは各MKPointAnnotationに割り当てることですか?

UPDATE:delegate関数viewForAnnotationが呼び出されていないことが分かりました。これは、ピンが紫色でない理由を説明します。 viewForAnnotationがなぜ呼び出されないのですか?

答えて

0

スウィフトの最新バージョンではプロパティは、次のようになります。

pinView!.pinTintColor = .purple 

か...

pinView!.pinTintColor = MKPinAnnotationView.purplePinColor() 

https://developer.apple.com/reference/mapkit/mkpinannotationview

+0

私はこの変更を試みたが、それはまだ動作していません。私は実際にviewForAnnotationが呼び出されていないという印刷ステートメントに基づいて考え出しました。したがって問題です。それがなぜ呼び出されないのか? –

+0

これを有効にする必要があるかもしれません(例えば、 'mapView.view(for:annotation)?. isEnabled = enabled')... –

関連する問題