如果在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中删除。
唯一想到的是用新的注释替换该注释并在其上设置坐标。理想情况下,引脚坐标将设置为其最后一个有效位置。
答案 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()
}
}