坐标设置时自定义 MKAnnotation 不移动

custom MKAnnotation not moving when coordinate set

我已经设置了自定义 MKAnnotation

class Location: NSObject, MKAnnotation {
    var id: Int
    var title: String?
    var name: String

    var coordinate: CLLocationCoordinate2D {
        didSet{
            didChangeValueForKey("coordinate")
        }
    }

当我设置坐标时,它不会移动地图上的图钉。我添加了带有关键字坐标的 'didSet',因为我发现有人说这会强制它更新。但什么也没有,它没有动。我已经验证了纬度/经度已经改变并且是正确的,别针只是没有移动。标题更新并显示更改。

我必须假设它是因为这是一个自定义注释。有帮助吗?

如果您要手动 post 这些更改事件,您还必须在 willSet 中调用 willChangeValue(forKey:)。在 Swift 4:

var coordinate: CLLocationCoordinate2D {
    willSet {
        willChangeValue(for: \.coordinate)
    }
    didSet {
        didChangeValue(for: \.coordinate)
    }
}

或在Swift 3:

var coordinate: CLLocationCoordinate2D {
    willSet {
        willChangeValue(forKey: #keyPath(coordinate))  
    }
    didSet {
        didChangeValue(forKey: #keyPath(coordinate))
    }
}

或者,更简单,只需将其指定为 dynamic 属性,此通知内容已为您完成。

@objc dynamic var coordinate: CLLocationCoordinate2D

对于 Swift 2 版本,请参阅 previous rendition of this answer