2011-07-02 1 views
4

Celui-ci est un peu obscur. Ce MKMapViewDelegate a une méthode qui est censée vous indiquer quand vous sartinez et terminez de faire glisser une vue d'annotation. J'ai mis en œuvre comme suit:Faire glisser la vue d'annotation provoque le déclenchement multiple de la méthode déléguée d'état de glissement

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState { 

    if (oldState == MKAnnotationViewDragStateStarting && newState == MKAnnotationViewDragStateEnding) 
    { 
     NSLog(@"Ending drag"); 
    } 

    if (newState == MKAnnotationViewDragStateStarting) 
    { 
     NSLog(@"Beginning drag"); 
    } 
} 

Ce type de travaux. Cependant, quand je me arrête en faisant glisser l'annotation, et faites-le glisser à nouveau, la méthode ci-dessus est déclenché deux fois, puis 3 fois, etc. Ainsi, les affiche de la console:

Beginning drag 
Ending drag 

Beginning drag 
Beginning drag 
Ending drag 
Ending drag 

Beginning drag 
Beginning drag 
Beginning drag 
Ending drag 
Ending drag 
Ending drag 

Beginning drag 
Beginning drag 
Beginning drag 
Beginning drag 
Ending drag 
Ending drag 
Ending drag 
Ending drag 

Toutes les idées sur ce qui est la cause?

Répondre

10

me semblait résoudre ce problème en ajoutant:

[annotationView setDragState:MKAnnotationViewDragStateNone]; 

dans la partie « mettre fin à glisser » de l'instruction if.

Questions connexes