2016-07-01 10 views
0

Ich erstelle benutzerdefinierte Annotation für MKMap. Es ist Arbeit, aber wenn ich auf eine Annotation klicke, verschwindet die Annotation (siehe Bild), dann erscheint und verschwindet die Annonce.MKViewMap benutzerdefinierte Annotation verschwindet beim Klick

(Ich habe dieses Tutorial getan https://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial)

Hier wird die benutzerdefinierte Anmerkung:

`Klasse 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") 

} 

}`

und in der Ansicht Controller:

func mapView (mapView: MKMapView, viewForAnnotation Anmerkung: 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 
    } 
} 

Danke =)

Bye

+0

niemand? help needed = ( – Xero

Antwort

1

ich die Lösung selbst gefunden, das ist die Linie war:

view.translatesAutoresizingMaskIntoConstraints = false

ich es gelöscht und es ist Arbeit

+0

Vielen Dank, Xero! Deine Antwort hat auch mein Problem behoben, mit dem ich seit langer Zeit zu kämpfen habe: http://stackoverflow.com/questions/39273459/ioss-mkmapview-custom-images-display- oben links / – cooltch