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

1 回答 1

4

可能的问题是您的configuration属性尚未配置为键值观察 (KVO),这是地图和/或注释视图如何感知坐标变化的方式。

我会通过包含关键字来确保它coordinate支持 KVO 。dynamic有关更多信息,请参阅Using Swift with Cocoa and Objective-C中的Key-Value Observing :采用 Cocoa 设计模式。

显然,我们不必在 KVO 讨论中编写所有的观察者代码(因为 MapKit 正在做所有这些),但我们至少需要使我们的注释支持 KVO。例如,您的注释类可能如下所示:

class ServisimAnnotation: NSObject, MKAnnotation {
    dynamic var coordinate: CLLocationCoordinate2D
    ...
}

未能声明coordinatedynamic将阻止发布键值通知,因此对注释的更改将不会反映在地图上。

于 2016-12-26T19:27:27.937 回答