Swift注释位置更新

时间:2016-12-26 18:41:31

标签: swift mapkit mkannotation cllocationcoordinate2d

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!)
}

1 个答案:

答案 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会阻止发布键值通知,因此注释的更改不会反映在地图上。