如何撤消MapKit注释拖动

时间:2015-11-05 18:00:46

标签: ios swift mkannotation mkannotationview

如果在mapView didChangeDragState中,我检测到注释已被拖动到不需要的位置,我可以取消mapView中的拖动:didChangeDragState。

 case .Dragging:  
            let inColorado = StateOutline.inColorado(view.annotation!.coordinate)
            if !inColorado {
                view.dragState = .Canceling
            }

不幸的是,这会将引脚留在取消拖动的不需要的位置。

想要将注释设置为

  • 有效坐标
  • 或恢复到拖拽前坐标
  • 或设置为拖动的最后一个有效位置

    case .Canceling:
            view.annotation!.coordinate = StateOutline.coloradoCenter()
            view.dragState = .None
        }
    

不允许使用该坐标设置,因为view.annotation!.coordinate是一个只用于get的属性。

如何撤消注释拖动?

使用MKAnnotation不需要考虑setCoordinate - 它已在iOS 8.3中删除。

唯一想到的是用新的注释替换该注释并在其上设置坐标。理想情况下,引脚坐标将设置为其最后一个有效位置。

1 个答案:

答案 0 :(得分:0)

这里的错误是相信无法设置注释的坐标。它可以。 MKAnnotation协议没有规定可设置的坐标,但所有实际的采用者都有一个。只需使用MKPointAnnotation即可。它的coordinate是可设置的。你甚至可能已经使用了一个!

public class MKPointAnnotation : MKShape {
    public var coordinate: CLLocationCoordinate2D
}

您甚至可以编写自己的MKAnnotation采用者:

import UIKit
import MapKit

class MyAnnotation : NSObject, MKAnnotation {
    dynamic var coordinate : CLLocationCoordinate2D
    var title: String?
    var subtitle: String?

    init(location coord:CLLocationCoordinate2D) {
        self.coordinate = coord
        super.init()
    }
}