尝试在地图上做一些注释。但无法绕过它。我使用的代码是
set('foo.baz.bar',{one:1})
答案 0 :(得分:12)
你真的没有尝试过多少。但看看这个。函数addAnnotation采用CLLocation类型的数组,这是您应该使用的。因此,使数组看起来像这样初始化CLLocation对象。我假设你已经有了一个有效的渲染地图,mapView对象等等。
let coords = [ CLLocation(latitude: xxxx, longitude: xxxx),
CLLocation(latitude: xxx, longitude: xxx),
CLLocation(latitude: xxx, longitude:xxx)
];
这是一个可以接受该数组的函数,并循环遍历每个元素并将其作为注释添加到mapView(尚未呈现)
func addAnnotations(coords: [CLLocation]){
for coord in coords{
let CLLCoordType = CLLocationCoordinate2D(latitude: coord.coordinate.latitude,
longitude: coord.coordinate.longitude);
let anno = MKPointAnnotation();
anno.coordinate = CLLCoordType;
mapView.addAnnotation(anno);
}
}
最后,当添加新注释时,您需要使用MKMapViewDelegate
委托来使用其自动调用的方法之一,因此我们可以对其进行排队和渲染。如果你一次添加注释,这是不必要的,但最好是这样添加注释,以便以后可以操作它们。
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation{
return nil;
}else{
let pinIdent = "Pin";
var pinView: MKPinAnnotationView;
if let dequeuedView = mapView.dequeueReusableAnnotationViewWithIdentifier(pinIdent) as? MKPinAnnotationView {
dequeuedView.annotation = annotation;
pinView = dequeuedView;
}else{
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: pinIdent);
}
return pinView;
}
}
不要只是添加此代码并期望它能够正常工作,确保将其正确地合并到项目的正确区域。如果您还有其他问题,请发表评论。
<强>更新强>
请记住将MKMapViewDelegate
协议继承到您使用的控制器中。
确保您在addAnnotations
中实际呼叫ViewDidLoad
,然后通过coords
数组。哪个可以在ViewDidLoad
中定义。
确保mapView方法不在ViewDidLoad中,而是控制器的成员。
答案 1 :(得分:0)
添加标题为Swift 5.0的简单注释
let addAnotation = MKPointAnnotation()
addAnotation.title = "YOUR TITLE"
addAnotation.coordinate = CLLocationCoordinate2D(latitude: [YOUR LATITIUDE], longitude: [YOUR LONGITUDE])
self.mapView.addAnnotation(addAnotation)
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
guard annotation is MKPointAnnotation else { return nil }
let identifier = "Annotation"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView!.canShowCallout = true
} else {
annotationView!.annotation = annotation
}
return annotationView
}