如何制作地图应用的注释

时间:2017-07-20 12:47:14

标签: ios swift swift3 annotations mapkit

我有一个带有地图的应用程序和许多使用自定义图像制作的注释,我的问题是当我拖动地图或缩放时,注释会显示另一个点(lat,lon)。

所以我很想知道,因为我在其他应用程序中也看到了这个错误,有没有办法解决它(作为总是显示正确的lat和lon的地图注释)。

这是我用于注释的代码:

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

    if annotation is MKUserLocation {
        return nil
    }


    var reuseId = ""

    if annotation is FBAnnotationCluster {

        reuseId = "Cluster"
        var clusterView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
        clusterView = FBAnnotationClusterView(annotation: annotation, reuseIdentifier: reuseId, configuration: FBAnnotationClusterViewConfiguration.default())
        return clusterView
    }else{

        reuseId = "pin"
        var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
        if  annotationView == nil {
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin")
            annotationView!.image = UIImage(named: "locat.png")


        }
        else {
            annotationView!.annotation = annotation

        }

        let cpa = annotation as! FBAnnotation

        annotationView!.image = nil

        let image = UIImage(named:cpa.nameImage)


        annotationView!.image = image


        return annotationView
    }




}

如果您对我提出的问题或其他任何问题有任何疑问,请随时发表评论。

提前致谢!

修改

我上传video显示我的问题

EDIT2

这是来自地图的video,表明他们的注释没有丢失其纬度和经度。

2 个答案:

答案 0 :(得分:1)

您的问题是MKAnnotationViewcenterOffset您需要在func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?

中调整此属性

正如MKAnnotationView文档中所定义

  

centerOffset属性显示的偏移量(以磅为单位)   图。

     

var centerOffset:CGPoint

     

讨论默认情况下,   注释视图的中心点位于坐标点   关联注释。您可以使用此属性重新定位   根据需要注释视图。测量该x和y偏移值   在点。正偏移值将注释视图向下移动到   右边,而负值将它向上移动到左边。

像这样

var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
        if  annotationView == nil {
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin")
            annotationView!.image = UIImage(named: "locat.png")
            //this is an example you must to get in account the form of your current view and what you want, I think your values are CGPoint(x: 0.5, y: 1)
            annotationView?.centerOffset = CGPoint(x: 0, y: -((UIImage(named: "locat.png")?.size.height)!/2))

        }
        else {
            annotationView!.annotation = annotation

        }

希望这有助于你

答案 1 :(得分:1)

你没有丢失纬度很长但你的纬线长度在你的注释图像的中心,你必须改变anchorPoint。

annotationView?.layer.anchorPoint = CGPoint(x: 0.5, y: 1.0)

in

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