2017-02-04 16 views
0

私はマップアノテーションの代わりに画像アノテーションを表示しようとしています。私はこのコードを使用しています:マップキットでカスタムアノテーションを表示

import UIKit 
import MapKit 

class ViewController2: UIViewController , MKMapViewDelegate { 

    @IBOutlet var mapView: MKMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mapView.delegate = self 

     let coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042) 

     let region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

     mapView.setRegion(region, animated: true) 



     var info1 = CustomPointAnnotation() 
     info1.coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042) 
     info1.title = "Info1" 
     info1.subtitle = "Subtitle" 
     info1.imageName = "taxi" 

     var info2 = CustomPointAnnotation() 
     info2.coordinate = CLLocationCoordinate2DMake(26.862280, 75.815098) 
     info2.title = "Info2" 
     info2.subtitle = "Subtitle" 
     info2.imageName = "smile" 

     mapView.addAnnotation(info1) 
     mapView.addAnnotation(info2) 

     mapView.showAnnotations(mapView.annotations, animated: true) 
    } 

    func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 

     print("delegate called") 

     if !(annotation is CustomPointAnnotation) { 
      return nil 
     } 

     let reuseId = "test" 

     var anView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) 
     if anView == nil { 
      anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
      anView?.canShowCallout = true 
     } 
     else { 
      anView?.annotation = annotation 
     } 

     //Set annotation-specific properties **AFTER** 
     //the view is dequeued or created... 

     let cpa = annotation as! CustomPointAnnotation 
     anView?.image = UIImage(named:cpa.imageName) 

     return anView 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewDidAppear(_ animated: Bool) { 

    } 


} 

class CustomPointAnnotation: MKPointAnnotation { 
    var imageName: String! 
} 

私は、デリゲートはviewcontroller : mapView.delegate = selfとの接続が、この方法では、viewForAnnotationを呼び出していないと思います。

私はまだ地図上の代わりにcustominnotationのピン注釈を参照してください。

Map

+0

の可能性のある重複[ iOS Swift MapKitカスタムアノテーション](http://stackoverflow.com/questions/38274115/ios-swift-mapkit-custom-annotation) –

+0

ブレークポイントの設定とコードのトレースに精通している場合は、コードがいつviewForAnnotationデリゲートは "if!(注釈はCustomPointAnnotationです)"を渡すか、そこに戻ります。 –

答えて

0

今、このコードを実装する場合:

import UIKit 
import MapKit 

class ViewController2: UIViewController , MKMapViewDelegate { 

    @IBOutlet var mapView: MKMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mapView.delegate = self 

     let coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042) 

     let region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

     mapView.setRegion(region, animated: true) 



     let annotation = MKPointAnnotation() 
     annotation.title = "Annotation Created" 
     annotation.subtitle = "mahdi" 
     annotation.coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042) 

     let annotation2 = MKPointAnnotation() 
     annotation2.title = "Annotation Created" 
     annotation2.subtitle = "mahdi" 
     annotation2.coordinate = CLLocationCoordinate2DMake(26.862280, 75.815098) 



     mapView.addAnnotation(annotation) 
     mapView.addAnnotation(annotation2) 

    } 


    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 

     guard !annotation.isKind(of: MKUserLocation.self) else { 

      return nil 
     } 

     let annotationIdentifier = "AnnotationIdentifier" 

     var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) 

     if annotationView == nil { 
      annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier) 
      annotationView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure) 
      annotationView!.canShowCallout = true 
     } 
     else { 
      annotationView!.annotation = annotation 
     } 

     annotationView!.image = UIImage(named: "taxi") 

     return annotationView 

    } 

私はこのような2つの画像の注釈を見ることができます:

enter image description here

は今、私は、ユーザーの場所でこの画像を含めたい、私はこのコードを試すが、それでも代わりに、ユーザーの場所と車の画像を表示することができますどのように

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 


     if let location = manager.location?.coordinate { 

      userLocation = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude) 

      // print(userLocation) 

      if driverOnTheWay == false { 

       let region = MKCoordinateRegion(center: userLocation, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 
       self.mapView.setRegion(region, animated: true) 
       self.mapView.removeAnnotations(self.mapView.annotations) 


       let annotation = MKPointAnnotation() 
       annotation.title = "مكانك هنا" 
       annotation.subtitle = "mahdi" 
       annotation.coordinate = userLocation 
       self.mapView.addAnnotation(annotation) 




      } 

      func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 

       guard !annotation.isKind(of: MKUserLocation.self) else { 

        return nil 
       } 

       let annotationIdentifier = "AnnotationIdentifier" 

       var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) 

       if annotationView == nil { 
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier) 
        annotationView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure) 
        annotationView!.canShowCallout = true 
       } 
       else { 
        annotationView!.annotation = annotation 
       } 

       annotationView!.image = UIImage(named: "car") 

       return annotationView 

      } 

画像の赤いピン注釈を参照してください

関連する問題