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詳細については、「Cocoa での Swift の使用」および「Objective-C: Cocoa デザイン パターンの採用」のKey-Value Observingを参照してください。

明らかに、その KVO ディスカッションでオブザーバー コードをすべて実行する必要はありません (MapKit がすべてを実行しているため) が、少なくとも注釈を KVO 対応にする必要があります。たとえば、アノテーション クラスは次のようになります。

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

coordinateasの宣言に失敗するdynamicと、キー値の通知が送信されなくなり、アノテーションへの変更がマップに反映されなくなります。

于 2016-12-26T19:27:27.937 に答える