2014-02-27 66 views
1

目前我正在實現一項功能,用戶可以在地圖上手動更正一個引腳。我已經將annotationView設置爲annotationView.draggable = YES;,並且我還實現了委託方法來接收新的座標。但是現在我怎麼能告訴mapView,拖動動作現在應該停止,並且銷釘在地圖上獲得固定位置,即使地圖被移動了。可拖曳引腳在地圖上沒有固定位置

當前的行爲是,在將引腳拖動到新位置後,如果我隨後移動地圖,則引腳在設備屏幕上具有固定位置,但不在地圖上。

幫助表示讚賞:)。

代表:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState 
{ 
    if (newState == MKAnnotationViewDragStateEnding) 
    { 
     CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate; 
     NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude); 
    } 
} 
+0

你可以嘗試設置annotationView.draggable = NO;在if語句中 – user2277872

+0

沒有幫助:/ –

+0

你如何更新註釋座標?在您提供的代碼中,您不會對新座標進行任何操作。 –

回答

4

UPDATE:

OK,修好了:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState 
{ 
    if (newState == MKAnnotationViewDragStateStarting) 
    { 
     annotationView.dragState = MKAnnotationViewDragStateDragging; 
    } 
    else if (newState == MKAnnotationViewDragStateEnding || newState == MKAnnotationViewDragStateCanceling) 
    { 
     annotationView.dragState = MKAnnotationViewDragStateNone; 
    } 
} 

現在我只需要堅持的新座標,我很好.. - 也許我會添加一些自定義動畫的狀態..:

當拖動狀態更改爲MKAnnotationViewDragStateStarting時,將狀態設置爲 MKAnnotationViewDragStateDragging。如果您執行 動畫以指示拖動的開始,並且動畫 參數爲YES,請在更改狀態之前執行該動畫。

當狀態改變爲任一MKAnnotationViewDragStateCanceling或 MKAnnotationViewDragStateEnding,狀態設置爲 MKAnnotationViewDragStateNone。如果您在拖動的末尾 處執行動畫,並且動畫參數爲YES,那麼在更改狀態之前應該執行動畫 。

+0

+1只是爲了澄清,這看起來像你不使用'MKPinAnnotationView'時獨特的行爲。對於引腳註釋視圖或早期版本的iOS,這似乎是不必要的。但這是一個很好的發現。 – Rob