ios - 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 ?? "")
}
}
}
}"
解决方案
它们被调用annotations
,MapKit
你应该像这样实例化它们:
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..."
推荐阅读
- react-native - 如何在 react-native cli 中升级 core-js@3?
- c# - 文本框:数据是否仅在可见时绑定?
- php - 在 WordPress 插件中获取模板部分
- php - 如何将数组作为url的参数传递并完整接收
- haskell - `stack ghci app:exe:executable` 的 cabal 等价物是什么?
- mysql - MySql 约束,两列在每一行上具有不同的值
- java - Spring boot:如何将命令行参数传递给注释值?
- ios - 调整 UITableView 以允许使用键盘
- javascript - 应用程序启动时是否可以通过控制台验证我的凭据?
- flexbox - 如何在 VBox 中居中 Text 或 FormattedText 并让文本在每一行的相同位置开始?