0

私はiOSが初めてです。この回答のコードを使用しました: https://stackoverflow.com/a/3999583/1572234

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView 
didChangeDragState:(MKAnnotationViewDragState)newState 
fromOldState:(MKAnnotationViewDragState)oldState 
{
if (newState == MKAnnotationViewDragStateEnding)
   {
    NSLog(@"didChangeDragState");
   }
}

- (void) mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView
{
if ([[annotationView.annotation title] isEqualToString:@"2nd"]||[[annotationView.annotation title] isEqualToString:@"3rd"])
   {
    NSLog(@"didSelectAnnotationView");
   }
}

しかし、ピンを 3 回ドラッグしようとした後、デバッグ エリアに次のように表示されました。

 2012-08-05 14:47:06.962 TestApp[1692:11603] didSelectAnnotationView
 2012-08-05 14:47:11.825 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:16.269 TestApp[1692:11603] didSelectAnnotationView
 2012-08-05 14:47:20.205 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:20.207 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:24.033 TestApp[1692:11603] didSelectAnnotationView
 2012-08-05 14:47:26.811 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:26.814 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:26.816 TestApp[1692:11603] didChangeDragState

ピンをドラッグするたびに NSLog(@"didChangeDragState") を 1 回呼び出すだけで済みますが、何が欠けていますか? 助けてください。

4

1 に答える 1

1

それはiosの古いバグです。1年以上前にアップルに報告しましたが、彼らはそれを再現できないと言います...私は自分の修正を追加しました:

 if (newState == MKAnnotationViewDragStateEnding)
{
    CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
    //drmap1 and drmap2 initialized to 0 before

    double d1=drmap1-droppedAt.latitude;
    double d2=drmap2-droppedAt.longitude;
    if(d1<0.000001&&d1>=-0.000001&&d2<0.000001&&d2>=-0.000001) return; //V1.2a fix a bug in ios

    drmap1=droppedAt.latitude;
    drmap2=droppedAt.longitude;
于 2012-09-04T09:17:09.317 に答える