0

我正在尝试在 mapkit 上显示图像注释而不是引脚注释。我正在使用这段代码:

import UIKit
import MapKit

class ViewController2: UIViewController , MKMapViewDelegate  {

    @IBOutlet var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self

        let coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042)

        let region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))

        mapView.setRegion(region, animated: true)



        var info1 = CustomPointAnnotation()
        info1.coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042)
        info1.title = "Info1"
        info1.subtitle = "Subtitle"
        info1.imageName = "taxi"

        var info2 = CustomPointAnnotation()
        info2.coordinate = CLLocationCoordinate2DMake(26.862280, 75.815098)
        info2.title = "Info2"
        info2.subtitle = "Subtitle"
        info2.imageName = "smile"

        mapView.addAnnotation(info1)
        mapView.addAnnotation(info2)

        mapView.showAnnotations(mapView.annotations, animated: true)
    }

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

        print("delegate called")

        if !(annotation is CustomPointAnnotation) {
            return nil
        }

        let reuseId = "test"

        var anView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
        if anView == nil {
            anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            anView?.canShowCallout = true
        }
        else {
            anView?.annotation = annotation
        }

        //Set annotation-specific properties **AFTER**
        //the view is dequeued or created...

        let cpa = annotation as! CustomPointAnnotation
        anView?.image = UIImage(named:cpa.imageName)

        return anView
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewDidAppear(_ animated: Bool) {

    }


}

class CustomPointAnnotation: MKPointAnnotation {
    var imageName: String!
}

我认为这个方法没有调用viewForAnnotation,尽管我将委托与viewcontroller : mapView.delegate = self.

我仍然看到别针注释而不是custominnotation在地图上:

地图

4

1 回答 1

0

现在实现此代码时:

import UIKit
import MapKit

class ViewController2: UIViewController , MKMapViewDelegate  {

    @IBOutlet var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self

        let coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042)

        let region = MKCoordinateRegion(center: coordinate, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))

        mapView.setRegion(region, animated: true)



        let annotation = MKPointAnnotation()
        annotation.title = "Annotation Created"
        annotation.subtitle = "mahdi"
        annotation.coordinate = CLLocationCoordinate2DMake(26.889281, 75.836042)

        let annotation2 = MKPointAnnotation()
        annotation2.title = "Annotation Created"
        annotation2.subtitle = "mahdi"
        annotation2.coordinate = CLLocationCoordinate2DMake(26.862280, 75.815098)



        mapView.addAnnotation(annotation)
        mapView.addAnnotation(annotation2)

    }


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

        guard !annotation.isKind(of: MKUserLocation.self) else {

            return nil
        }

        let annotationIdentifier = "AnnotationIdentifier"

        var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier)

        if annotationView == nil {
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
            annotationView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
            annotationView!.canShowCallout = true
        }
        else {
            annotationView!.annotation = annotation
        }

        annotationView!.image = UIImage(named: "taxi")

        return annotationView

    }

我可以看到这样的两个图像注释:

在此处输入图像描述

现在我想将此图像包含在用户位置中,我尝试使用此代码但仍然看到红色引脚注释而不是图像

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


        if let location = manager.location?.coordinate {

            userLocation  = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)

           // print(userLocation)

            if driverOnTheWay == false {

                let region = MKCoordinateRegion(center: userLocation, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
                self.mapView.setRegion(region, animated: true)
                self.mapView.removeAnnotations(self.mapView.annotations)


                let annotation = MKPointAnnotation()
                annotation.title = "مكانك هنا"
                annotation.subtitle = "mahdi"
                annotation.coordinate = userLocation
                self.mapView.addAnnotation(annotation)




            }

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

                guard !annotation.isKind(of: MKUserLocation.self) else {

                    return nil
                }

                let annotationIdentifier = "AnnotationIdentifier"

                var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier)

                if annotationView == nil {
                    annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
                    annotationView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
                    annotationView!.canShowCallout = true
                }
                else {
                    annotationView!.annotation = annotation
                }

                annotationView!.image = UIImage(named: "car")

                return annotationView

            }

如何显示带有用户位置的汽车图像

于 2017-02-08T10:13:26.953 回答