如何在Swift 3/4中更改MapKit的引脚颜色?

时间:2017-08-11 07:27:24

标签: ios swift

所以,我正在使用MapKit创建一个应用程序。因此,我需要一些帮助,将地图引脚颜色从红色更改为任何可能的颜色。我尝试过各种方式,我不能找到解决方案。任何人都可以检查我的代码,并帮助我将其应用到我的代码下面更改地图的pin tintColor。提前致谢。

这是我的代码:

    override func viewDidLoad() {
    super.viewDidLoad()

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
    locationManager.requestWhenInUseAuthorization()


  }
extension ViewController: CLLocationManagerDelegate {



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

    if locations.count > 0 {
      let location = locations.last!
      print("Accuracy: \(location.horizontalAccuracy)")

      if location.horizontalAccuracy < 100 {

        manager.stopUpdatingLocation()
        let span = MKCoordinateSpan(latitudeDelta: 0.014, longitudeDelta: 0.014)
        let region = MKCoordinateRegion(center: location.coordinate, span: span)
        mapView.region = region



                let location = CLLocation(latitude: latitude, longitude: longitude)
                let place = Place(location: location, reference: reference, name: name, address: address)
                self.places.append(place)

                let annotation = MyHome(location: place.location!.coordinate, title: place.placeName)

                DispatchQueue.main.async {

                  self.mapView.addAnnotation(annotation)
                }
              }
            }
          }
        }
      }
    }
  }
} 
  

MyHome CLass

    import Foundation
import MapKit

class MyHome: NSObject, MKAnnotation {
  let coordinate: CLLocationCoordinate2D
  let title: String?

  init(location: CLLocationCoordinate2D, title: String) {
    self.coordinate = location
    self.title = title

    super.init()
  }
}
  

MapView的

     fileprivate var locationManager = CLLocationManager()
    fileprivate var heading: Double = 0
    fileprivate var interactionInProgress = false

    public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
    {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }

    required public init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }

    open override func viewDidLoad()
    {
        super.viewDidLoad()
        self.mapView.isRotateEnabled = false

        if let annotations = self.annotations
        {
            addAnnotationsOnMap(annotations)
        }
        locationManager.delegate = self
    }

    open override func viewDidAppear(_ animated: Bool)
    {
        super.viewDidAppear(animated)
        locationManager.startUpdatingHeading()
    }

    open override func viewDidDisappear(_ animated: Bool)
    {
        super.viewDidDisappear(animated)
        locationManager.stopUpdatingHeading()
    }


    open func addAnnotations(_ annotations: [ARAnnotation])
    {
        self.annotations = annotations

        if self.isViewLoaded
        {
            addAnnotationsOnMap(annotations)
        }
    }

    fileprivate func addAnnotationsOnMap(_ annotations: [ARAnnotation])
    {
        var mapAnnotations: [MKPointAnnotation] = []
        for annotation in annotations
        {
            if let coordinate = annotation.location?.coordinate
            {
                let mapAnnotation = MKPointAnnotation()
                mapAnnotation.coordinate = coordinate
                let text = String(format: "%@, AZ: %.0f, VL: %i, %.0fm", annotation.title != nil ? annotation.title! : "", annotation.azimuth, annotation.verticalLevel, annotation.distanceFromUser)
                mapAnnotation.title = text
                mapAnnotations.append(mapAnnotation)

            }
        }
        mapView.addAnnotations(mapAnnotations)
        mapView.showAnnotations(mapAnnotations, animated: false)
    }






    open func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
    {
        heading = newHeading.trueHeading


        if(!self.interactionInProgress && CLLocationCoordinate2DIsValid(mapView.centerCoordinate))
        {
            let camera = mapView.camera.copy() as! MKMapCamera
            camera.heading = CLLocationDirection(heading);
            self.mapView.setCamera(camera, animated: false)
        }
    }

    open func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool)
    {
        self.interactionInProgress = true
    }

    open func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool)
    {
        self.interactionInProgress = false
    }
} 

1 个答案:

答案 0 :(得分:2)

你必须在MKMapViewDelegate委托方法中改变它的颜色

@IBOutlet weak var customMap: MKMapView!

override func viewDidLoad() {
        super.viewDidLoad()

        let anoot = MKPointAnnotation()
        anoot.coordinate = CLLocationCoordinate2D.init(latitude: lat, longitude: lng)
        customMap.addAnnotation(anoot)
        customMap.delegate = self
    }

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

        let annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")

        annotationView.pinTintColor = UIColor.green


        return annotationView
    }

你可以在你的代码中这样做

class ViewController: UIViewController {

    var locationManager = CLLocationManager()

    @IBOutlet weak var yourMap: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        yourMap.delegate = self

        let anoot = MKPointAnnotation()
        anoot.coordinate = CLLocationCoordinate2D.init(latitude: 23.0225, longitude: 72.5714)
        yourMap.addAnnotation(anoot)
        yourMap.delegate = self

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.startUpdatingLocation()
        locationManager.requestWhenInUseAuthorization()
    }
}

extension ViewController: CLLocationManagerDelegate, MKMapViewDelegate {

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

        let annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")

        annotationView.pinTintColor = UIColor.green

        return annotationView
    }

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

        if locations.count > 0 {
            let location = locations.last!
            print("Accuracy: \(location.horizontalAccuracy)")

            if location.horizontalAccuracy < 100 {

                manager.stopUpdatingLocation()
                let span = MKCoordinateSpan(latitudeDelta: 0.014, longitudeDelta: 0.014)
                let region = MKCoordinateRegion(center: location.coordinate, span: span)
                yourMap.region = region

//                let location = CLLocation(latitude: latitude, longitude: longitude)
//                let place = Place(location: location, reference: reference, name: name, address: address)
//                self.places.append(place)
//
//                let annotation = MyHome(location: place.location!.coordinate, title: place.placeName)
//
//                DispatchQueue.main.async {
//
//                    self.mapView.addAnnotation(annotation)
//                }
            }
        }
    }
}