拖动时更新 MKPointAnnotation 对象

Posted

技术标签:

【中文标题】拖动时更新 MKPointAnnotation 对象【英文标题】:Update MKPointAnnotation object while dragging 【发布时间】:2016-08-04 08:26:40 【问题描述】:

我想知道如何在拖动时更新我的​​ annotation 标题,因为所有 annotation 属性都仅限于 get

我尝试过的代码:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) 

    switch (newState) 
    case .starting:
        //view.dragState = .dragging
        print("dragging.....")
    case .ending, .canceling:
        // view.dragState = .none
        let lat = view.annotation?.coordinate.latitude
        let long = view.annotation?.coordinate.longitude
        let coordinates = CLLocationCoordinate2D(latitude: lat!, longitude: long!)
        print(" pin lat \(lat) long \(long)")

        //Error here - title is get only property
        view.annotation?.title = "New Location"

    default: break
    


【问题讨论】:

【参考方案1】:

MKMapViewDelegate的拖动方法中,注解是只读的,所以你可以使用MKMapViewDelegatedidSelectAnnotationView方法,因为在拖动之前它会调用didSelectAnnotationView方法,为此声明一个selectedAnnotation类型的实例属性MKPointAnnotation.

var selectedAnnotation: MKPointAnnotation?

现在在didSelectAnnotationView 方法中使用这个属性。

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) 
    selectedAnnotation = view.annotation as? MKPointAnnotation

现在要更改标题,请使用此注释

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) 
    switch (newState) 
        case .starting:
            //view.dragState = .dragging
            print("dragging.....")
        case .ending, .canceling:
            // view.dragState = .none
            let lat = view.annotation?.coordinate.latitude
            let long = view.annotation?.coordinate.longitude
            let coordinates = CLLocationCoordinate2D(latitude: lat!, longitude: long!)
            print(" pin lat \(lat) long \(long)")
            self. selectedAnnotation?.title = "New Location"
        default: break
    


【讨论】:

欢迎朋友,快乐编码:)

以上是关于拖动时更新 MKPointAnnotation 对象的主要内容,如果未能解决你的问题,请参考以下文章

获取 MKPointAnnotation 标题

向 MKPointAnnotation 添加按钮?

为啥我的 MKPointAnnotation 不是自定义的?

MKPointAnnotation 不再在 iOS 11 中显示标题

MKPointAnnotation 在标签中显示图像

自定义 MKPointAnnotation 颜色