2

すべてのプロパティが唯一annotationのものであるため、ドラッグ中にタイトルを更新する方法を知りたいです。annotationget

私が試したコード:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) {

    switch (newState) {
    case .starting:
        //view.dragState = .dragging
        print("dragging.....")
    case .ending, .canceling:
        // view.dragState = .none
        let lat = view.annotation?.coordinate.latitude
        let long = view.annotation?.coordinate.longitude
        let coordinates = CLLocationCoordinate2D(latitude: lat!, longitude: long!)
        print(" pin lat \(lat) long \(long)")

        //Error here - title is get only property
        view.annotation?.title = "New Location"

    default: break
    }

}
4

1 に答える 1

5

のドラッグ メソッドでは、アノテーションは読み取り専用であるため、メソッド をMKMapViewDelegate使用できます。これは、ドラッグする前にメソッドを呼び出すためです。そのために、タイプ のインスタンス プロパティを1 つ宣言します。didSelectAnnotationViewMKMapViewDelegatedidSelectAnnotationViewselectedAnnotationMKPointAnnotation

var selectedAnnotation: MKPointAnnotation?

このプロパティをdidSelectAnnotationViewメソッドで使用します。

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
    selectedAnnotation = view.annotation as? MKPointAnnotation
}

タイトルを変更するには、この注釈を使用します

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) {
    switch (newState) {
        case .starting:
            //view.dragState = .dragging
            print("dragging.....")
        case .ending, .canceling:
            // view.dragState = .none
            let lat = view.annotation?.coordinate.latitude
            let long = view.annotation?.coordinate.longitude
            let coordinates = CLLocationCoordinate2D(latitude: lat!, longitude: long!)
            print(" pin lat \(lat) long \(long)")
            self. selectedAnnotation?.title = "New Location"
        default: break
    }

}
于 2016-08-04T09:16:53.727 に答える