Swift在地图上添加注释

时间:2016-09-13 11:59:02

标签: ios swift annotations

尝试在地图上做一些注释。但无法绕过它。我使用的代码是

 set('foo.baz.bar',{one:1})

2 个答案:

答案 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
}