How to add a customView xib as annotation in Ios?

2019-06-12 03:09发布

问题:

when i am using googlemaps all I have to do is

    let marker = GMSMarker()
    marker.position = postions.target
    marker.title = "TEST"
    marker.map = self.mapView
    let myCustomView:CustomView = UINib(nibName: "CustomView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomView
    marker.iconView = myCustomView

but if i am using MAPKIT, how will I achieve this.? Mycustomview is a xib view file i created.

回答1:

Try to add the object of the nib view to the annotation view like this

 func mapView(_ mapView: MKMapView,viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
    if annotation is MKUserLocation == true
    {

        return nil
    }


    let senderAnnotation = annotation as! MyAnnotation

    let pinReusableIdentifier = senderAnnotation.pinColor.rawValue

    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: pinReusableIdentifier)

    if annotationView == nil
    {

        annotationView = MKAnnotationView(annotation: senderAnnotation,                                                                                                reuseIdentifier: pinReusableIdentifier)
          annotationView!.canShowCallout = true



    }

  let customView = (Bundle.main.loadNibNamed("directOrderView", owner: self, options: nil))?[0] as! directOrderView;

  var calloutViewFrame = customView.frame;
  calloutViewFrame.origin = CGPoint(x:-calloutViewFrame.size.width/2 + 30,y: -calloutViewFrame.size.height);
  customView.frame = calloutViewFrame;

  annotationView?.addSubview(customView)

  return annotationView

  }


回答2:

ok i found the solution

   func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if annotation is MKUserLocation
        {
            return nil
        }
        var annotationView = self.mapView.dequeueReusableAnnotationView(withIdentifier: "Pin")
        if annotationView == nil{
            annotationView = AnnotationView(annotation: annotation, reuseIdentifier: "Pin")
            annotationView?.canShowCallout = false
        }else{
            annotationView?.annotation = annotation
            //annotationView?.canShowCallout = true
           // mapView.deselectAnnotation(annotation, animated: true)
           // mapView.selectAnnotation(annotation, animated: true)
        }
        let myCustomView:CustomView = UINib(nibName: "CustomView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomView
        annotationView?.addSubview(myCustomView)
    //    annotationView?.image = UIImage(named: "starbucks")

        return annotationView
    }