更改 MKMapView 用户位置注释

问题描述 投票:0回答:4

我正在尝试将 MKMapView 上的用户默认位置注释从蓝色更改为名为 geo 的自定义图像。当我设置断点时,它击中了线将其设置为geo,但是两个点(用户默认值和乘客点都是默认的红色精确注释)是我设置错误还是有某些图像规定?

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

        if annotation.isKindOfClass(PassengerLocation) == false {

            //User location
            let userIdentifier = "UserLocation"
            var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(userIdentifier)

            if annotationView == nil {
                annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier:userIdentifier)
            }
            annotationView!.annotation = annotation
            annotationView!.canShowCallout = true

            // THIS IS NOT WORKING, DEFAULT RED PIN POINT STILL SHOWING
            annotationView!.image = UIImage(named: "geo")
            return annotationView


        }

        let identifier = "PassengerLocation"

        if let annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) {
            annotationView.annotation = annotation

            return annotationView
        } else {
            let annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier:identifier)
            annotationView.enabled = true
            annotationView.canShowCallout = true

            let btn = UIButton(type: .DetailDisclosure)
            annotationView.rightCalloutAccessoryView = btn

            return annotationView
        }

    }
ios swift mkmapview
4个回答
7
投票

这有效:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if annotation.isEqual(mapView.userLocation) {
        let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "userLocation")
        annotationView.image = UIImage(named: "globe")
        return annotationView
    }
}

2
投票

它对我有用

    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

    // want to show a custom image if the annotation is the user's location.
    guard !annotation.isKindOfClass(MKUserLocation) else {
        let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "userLocation")
        annotationView.image = UIImage(named: "icon_coordinates_self")
        return annotationView
        //return nil
    }

    let annotationIdentifier = "AnnotationIdentifier"

    var annotationView: MKAnnotationView?
    if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(annotationIdentifier) {
        annotationView = dequeuedAnnotationView
        annotationView?.annotation = annotation
    }
    else {
        let av = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
        av.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
        annotationView = av
    }

    if let annotationView = annotationView {
        // Configure your annotation view here
        annotationView.canShowCallout = true
        annotationView.image = UIImage(named: "Annotation_map")
    }

    return annotationView
}

0
投票

如果您想自定义图像,请使用常规的 MKAnnotationView。使用别针,您所能做的就是改变颜色。


0
投票
guard !annotation.isKind(of: MKUserLocation.self) else {
     return nil
}

效果很好

© www.soinside.com 2019 - 2024. All rights reserved.