I am creating a custom annotation for MKMap. It works, but when I click on the annotation, the annotation disappears (see image), then the leader displays and disappears.
(I made this tutorial https://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial )
Here's a user annotation:
`class Trail: NSObject, MKAnnotation {
let title: String? let difficulty: String let coordinate: CLLocationCoordinate2D var enableInfoButton : Bool init(title: String, difficulty: String, coordinate: CLLocationCoordinate2D, enableInfoButton : Bool) { self.title = title self.difficulty = difficulty self.coordinate = coordinate self.enableInfoButton = enableInfoButton; super.init() } var subtitle: String? { return title } func annotationView() -> MKAnnotationView { let view = MKAnnotationView(annotation: self, reuseIdentifier: "trailPin") view.translatesAutoresizingMaskIntoConstraints = false view.enabled = true view.canShowCallout = true view.rightCalloutAccessoryView = UIButton(type: UIButtonType.Custom) view.centerOffset = CGPointMake(0, -32) if(difficulty == Difficulty.HARD){ view.image = UIImage(named: "ic_map_poi_trail_hard") } else if(difficulty == Difficulty.AVERAGE){ view.image = UIImage(named: "ic_map_poi_trail_average") } else if(difficulty == Difficulty.EASY){ view.image = UIImage(named: "ic_map_poi_trail_easy") } return view } func infoClicked(sender: AnyObject?) { print("infoClicked") }
} `
and in the view controller:
func mapView (mapView: MKMapView, annotation view for annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation.isKindOfClass(Trail)) { let customAnnotation = annotation as? Trail mapView.translatesAutoresizingMaskIntoConstraints = false var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("trailPin") as MKAnnotationView! if (annotationView == nil) { annotationView = customAnnotation?.annotationView() } else { annotationView.annotation = annotation; } //self.addBounceAnimationToView(annotationView) return annotationView } else { let reuseId = "trailPin" var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) if anView == nil { anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) anView!.image = UIImage(named:"map") anView!.canShowCallout = true } else { //we are re-using a view, update its annotation reference... anView!.annotation = annotation } return anView } }
Thanks =)
Bye
source share