首页 > 解决方案 > IOS 地图引脚不显示?

问题描述

我正在为我的 iOS 代码而苦苦挣扎。该项目的总体目标是在地图上显示图钉,我尝试了多种方法使图钉出现在地图上,如下所示,我不确定我做错了什么。代码运行良好,引脚没有出现。我已经对我的功能进行了更改,但似乎得到了同样的错误。关于我可能遗漏的任何见解?

"导入 UIKit 导入 MapKit

类 MapViewController: UIViewController, MKMapViewDelegate {

@IBOutlet weak var mapView: MKMapView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var logout: UIBarButtonItem!
@IBOutlet weak var refresh: UIBarButtonItem!
@IBOutlet weak var pinDrop: UIBarButtonItem!


var studentLocation = [StudentInformation]()
var annotations = [MKPointAnnotation]()

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Do any additional setup after loading the view.
}

override func viewDidAppear (_ animated: Bool) {
    super.viewDidAppear(true)
    getStudentPins()
}

@IBAction func refresh(_ sender: UIBarButtonItem) {
    getStudentPins ()
}
@IBAction func logout(_ sender: UIBarButtonItem) {
    self.activityIndicator.startAnimating()
    UdacityClient.logout {
        DispatchQueue.main.async {
            self.dismiss(animated: true, completion: nil)
            self.activityIndicator.stopAnimating()
        }
    }
}

@IBAction func addLocation(_ sender: Any) {
    performSegue(withIdentifier: "addLocation", sender: nil)
}

func getStudentPins () {
    self.activityIndicator.startAnimating()
    UdacityClient.getStudentLocations() { locations, error in
        self.mapView.removeAnnotations(self.annotations)
        self.annotations.removeAll()
        self.studentLocation = locations ?? []
        for dictionary in locations ?? [] {
            let latitude = CLLocationDegrees(dictionary.latitude ?? 0.0)
            let longitude = CLLocationDegrees(dictionary.longitude ?? 0.0)
            let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
            let firstName = dictionary.firstName
            let lastName = dictionary.lastName
            let mediaURL = dictionary.mediaURL
            let annotation = MKPointAnnotation()
            annotation.coordinate = coordinate
            annotation.title = "\(firstName) \(lastName)"
            annotation.subtitle = mediaURL
            self.annotations.append(annotation)
        }
        DispatchQueue.main.async {
            self.mapView.addAnnotations(self.annotations)
            self.activityIndicator.stopAnimating()
        }
    }
}

private func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotation? {
    let reuseId = "pin"
    var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
    if pinView == nil {
        pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView!.canShowCallout = true
        pinView!.pinTintColor = .green
        pinView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
    }
    else {
        pinView!.annotation = annotation
    }
    return pinView?.annotation
}

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if control == view.rightCalloutAccessoryView {
        if let toOpen = view.annotation?.subtitle {
            openLink(toOpen ?? "")
        }
    }
}

}"

标签: iospins

解决方案


它们被调用annotationsMapKit你应该像这样实例化它们:

let annotation = MKPointAnnotation() 

然后在viewDidLoad()方法中设置坐标并将它们添加到地图中,如:

annotation.coordinate = CLLocationCoordinate2D(latitude: 11.12, longitude: 12.11)
mapView.addAnnotation(annotation)

数字是你的坐标。尝试首先在地图上添加示例坐标,然后添加您从客户端获取的所有坐标。

您还可以使用以下方法添加更多信息:

annotation.title = "Your text here"
//You can also add a subtitle that displays under the annotation such as
annotation.subtitle = "One day I'll go here..."

推荐阅读