0

Ich möchte den Benutzerstandort als blauen Punkt haben, während Pins auch auf dem Mapview haben. Ich möchte, dass die Pins eine Anmerkung haben, die eine Info-Taste hat. Ich kann den blauen Punkt für den Standort des Benutzers erhalten und die Stifte aktivieren, um eine Anmerkung wie einen Titel und einen Untertitel zu haben. Wenn ich jedoch die Info-Schaltfläche an die roten Pins anschließe, wird die Benutzerposition (blauer Punkt) zu einem roten Pin.Benutzerstandort (blauer Punkt) wird immer roter Pin

Ich kann nicht erkennen, wo ich falsch liege. Es hat etwas mit der letzten Funktion zu tun, da dies die Funktion ist, die eine Info-Schaltfläche auf die Annotation setzt. Aber es wählt auch den aktuellen Standort Benutzer und verwandelt es in einen Stift aus irgendeinem Grund :(

class GetToTheStart: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

@IBOutlet weak var mapView: MKMapView! 




let myLocMgr = CLLocationManager() 


    override func viewDidLoad() { 
    super.viewDidLoad() 


    myLocMgr.desiredAccuracy = kCLLocationAccuracyBest 
    myLocMgr.requestWhenInUseAuthorization() 
    myLocMgr.startUpdatingLocation() 
    myLocMgr.delegate = self 




    mapView.delegate = self 


    var zoo = CLLocationCoordinate2DMake(53.3562, -6.3053) 

    var zoopin = MKPointAnnotation() 
    zoopin.coordinate = zoo 
    zoopin.title = "dublin zoo" 
    zoopin.subtitle = "hello this is the zoo" 
    mapView.addAnnotation(zoopin) 
    } 



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

    // get most recient coordinate 
    let myCoor = locations[locations.count - 1] 

    //get lat & long 
    let myLat = myCoor.coordinate.latitude 
    let myLong = myCoor.coordinate.longitude 
    let myCoor2D = CLLocationCoordinate2D(latitude: myLat, longitude: myLong) 

    //set span 
    let myLatDelta = 0.05 
    let myLongDelta = 0.05 
    let mySpan = MKCoordinateSpan(latitudeDelta: myLatDelta, longitudeDelta: myLongDelta) 

    let myRegion = MKCoordinateRegion(center: myCoor2D, span: mySpan) 

    self.mapView.showsUserLocation = true   
    } 





    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    let reuseIdentifier = "pin" 
    var pin =  mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView 
    if pin == nil { 
     pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier) 
     pin!.pinColor = .Red 
     pin!.canShowCallout = true 
     pin!.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) 
    } else { 
     pin!.annotation = annotation 
    } 
    return pin 
} 

Antwort

2

viewForAnnotation Delegatmethode wird von allen die Anmerkung auf deruserLocation einschließlich Karte aufgerufen werden.

so überprüfen Sie einfach und zurück nil für sie wie unten gezeigt ...

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    if annotation is MKUserLocation { 
    //return nil so map view draws "blue dot" for standard user location 
     return nil 
    } 
    let reuseIdentifier = "pin" 
    var pin = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView 
    if pin == nil { 
     pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier) 
     pin!.pinColor = .Red 
     pin!.canShowCallout = true 
     pin!.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) 
    } else { 
     pin!.annotation = annotation 
    } 
    return pin 
} 
+0

das ist der Job dank Mann :) –

+0

mit Vergnügen ... Während die Frage Haupt-Posting einige Standards zumindest für den Codeteil –