MKViewMap custom annotation disappears when clicked

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") } /*if(self.enableInfoButton){ let detailButton = UIButton(type: UIButtonType.System) as UIButton detailButton.frame.size.width = 35 detailButton.frame.size.height = 35 detailButton.backgroundColor = UIColor.whiteColor() detailButton.setImage(UIImage(named: "map"), forState: .Normal) detailButton.addTarget(self, action: #selector(Trail.infoClicked(_:)), forControlEvents: .TouchUpInside) view.leftCalloutAccessoryView = detailButton }*/ 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

0
source share
1 answer

I found the solution myself, it was a line:

view.translatesAutoresizingMaskIntoConstraints = false

I deleted it and it works

+2
source

Source: https://habr.com/ru/post/1216282/


All Articles