坐标设置时自定义 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。
我已经设置了自定义 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。