3

私はドラッグ可能なものを持っており、ドラッグの開始時と終了時にコールバックを取得するデリゲート メソッドをMKAnnotationView実装しましたが、継続的ではありません。didChangeDragState:ドラッグされている注釈の現在の座標を追跡したいのですが、解決策を教えてください。ありがとうございました。

4

2 に答える 2

0

私の知る限り、これを行うための Apple 提供の方法はありませんが、KVO (h/t to this answer ) を使用して実現できます。

注釈の座標は に入るまで更新されないため、注釈ビューの座標も手動で決定する必要がありますMKAnnotationViewDragStateEnding

完全なソリューションは次のようになります。

// Somewhere in your code before the annotation view gets dragged, subscribe your observer object to changes in the annotation view's frame center
annotationView.addObserver(DELEGATE_OBJECT, forKeyPath: "center", options: NSKeyValueObservingOptions.New, context: nil)

// Then in the observer's code, fill out the KVO callback method
// Your observer will need to conform to the NSKeyValueObserving protocol -- all `NSObject`s already do
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    // Check that we're observing an annotation view. The `where` clause can be omitted if you're only observing changes in its frame, or don't care about extra calls
    if let annotationView = object as? MKAnnotationView where keyPath == "center" {
        // Defined below, `coordinateForAnnotationView` converts a CGPoint measured within a given MKMapView to the geographical coordinate represented in that location
        let newCoordinate = coordinateForAnnotationView(pin, inMapView: self.mapView)

        // Do stuff with `newCoordinate`
    }
}

func coordinateForAnnotationView(annotationView: MKAnnotationView, inMapView mapView: MKMapView) -> CLLocationCoordinate2D {
    // Most `MKAnnotationView`s will have a center offset, including `MKPinAnnotationView`
    let trueCenter = CGPoint(x: annotationView.center.x - annotationView.centerOffset.x,
        y: annotationView.center.y - annotationView.centerOffset.y)

    return mapView.convertPoint(trueCenter, toCoordinateFromView: mapView)
}
于 2016-01-07T02:19:10.877 に答える
0

座標は、annotationview.coordinates から取得できます。

  -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view   
  didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:
  (MKAnnotationViewDragState)oldState
  {
  CLLocationCoordinate2D currentCoordinates = view.annotation.coordinate;
  }
于 2012-09-26T03:23:28.487 に答える