L'annotation dragable de ios 7 MKMapView change sa position lorsque la carte défile

Je suis en train de mettre à jour mon application (MyWorld) sur iOS 7. L'une des fonctionnalités de l'application est que vous pouvez faire glisser la punaise sur la carte. Il semble être cassé dans iOS7.

Étapes pour recréer le problème:

  • Ajout d'une annotation à la carte: – fonctionne bien
  • Déplacer l'annotation (glisser) fonctionne bien
  • Défilement de la carte: problème

Chaque fois que je fais défiler l'affichage de la carte, l'annotation est déplacée avec la carte. Il semble que ce n'est pas attaché à la bonne vue ou couche? Si la broche n'est pas déplacée, la vue de la carte semble fonctionner correctement et l'annotation rest dans la position définie. Je me request si c'est une erreur de ma part ou un problème connu?

J'ai créé un projet MapViewTest factice qui résout le problème sur github: https://github.com/DJMobileInc/MapViewTest

Cela provient de la reference de class MKAnnotationView , pour la constante MKAnnotationViewDragStateNone:

MKAnnotationViewDragStateNone

La vue n'est pas impliquée dans une opération de glissement. La vue d'annotation est responsable de son return à cet état quand un glissement se termine ou est annulé.

Pour résoudre le problème, votre délégué de vue de carte doit redéfinir le dragState de la vue d'annotation sur MKAnnotationViewDragStateNone lorsque l'annotation est terminée ou annule son opération de glissement.

Par exemple:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState { if (newState == MKAnnotationViewDragStateEnding) { // custom code when drag ends... // tell the annotation view that the drag is done [annotationView setDragState:MKAnnotationViewDragStateNone animated:YES]; } else if (newState == MKAnnotationViewDragStateCanceling) { // custom code when drag canceled... // tell the annotation view that the drag is done [annotationView setDragState:MKAnnotationViewDragStateNone animated:YES]; } } 

J'ai eu le même problème et je l'ai résolu en ajoutant "setDragState" à ma class MKAnnotationView.

C'est une vieille solution mais cela a fonctionné pour moi (iOS7): https://stackoverflow.com/a/4457772/2410800