import UIKit
import MapKit
import CoreLocation
class ServisimNeredeViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {
var coordinates: [[Double]]!
var names:[String]!
var addresses:[String]!
var phones:[String]!
var locationManager :CLLocationManager = CLLocationManager()
let singleton = Global.sharedGlobal
let point = ServisimAnnotation(coordinate: CLLocationCoordinate2D(latitude: 41.052466 , longitude: 29.132123))
override func viewDidLoad() {
super.viewDidLoad()
coordinates = [[41.052466,29.108976]]// Latitude,Longitude
names = ["Servisiniz Burada"]
addresses = ["Furkan Kutlu"]
phones = ["5321458375"]
self.map.delegate = self
let coordinate = coordinates[0]
point.image = UIImage(named: "direksiyon")
point.name = names[0]
point.address = addresses[0]
point.phone = phones[0]
self.map.addAnnotation(point)
...
}
...
}
我在加载第一个屏幕时添加坐标的注释我按下按钮时更新新设置的坐标。我希望按下按钮时立即更新位置。我该怎么办?
@IBAction func tttesttt(_ sender: Any) {
self.point.coordinate = CLLocationCoordinate2D(latitude: 42.192846, longitude: 29.263417)
}
执行上述操作时,不会更新新位置。但是协调被消除了,新的协调被更新了,而不是像我这样做,但它没有再发生
DispatchQueue.main.async {
self.point.coordinate = CLLocationCoordinate2D(latitude: surucuKordinant.latitude!, longitude: surucuKordinant.longitude!)
}
答案 0 :(得分:4)
可能的问题是您的glm
属性尚未配置为键值观察(KVO),这是地图和/或注释视图如何知道坐标的变化。
我会通过添加cut(Wage$age, i)
关键字来确保glm
能够支持KVO。有关更多信息,请参阅使用Swift with Cocoa和Objective-C中的Key-Value Observing:采用Cocoa设计模式。
显然,我们不必在KVO讨论中做所有观察代码(因为MapKit正在做所有这些),但我们至少需要使我们的注释能够支持KVO。例如,您的注释类可能如下所示:
configuration
未将coordinate
声明为dynamic
会阻止发布键值通知,因此注释的更改不会反映在地图上。