我已经设置了自定义MKAnnotation
class Location: NSObject, MKAnnotation {
var id: Int
var title: String?
var name: String
var coordinate: CLLocationCoordinate2D {
didSet{
didChangeValueForKey("coordinate")
}
}
当我设置坐标时,它不会移动地图上的图钉。我添加了' didSet'用关键字坐标,因为我发现有人说会强制它更新。但没有,它没有动。我已经验证了lat / long已经改变并且是正确的,引脚就不动了。标题更新并显示更改。
我必须假设它,因为这是一个自定义注释。有什么帮助吗?
答案 0 :(得分:15)
如果您要手动发布这些更改事件,则还必须在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。