MKMapView : visibilité des annotations lors d'un dezoom

Bonjour à  tous,

 

Je travaille sur un projet qui consiste à  suivre plusieurs dizaines de véhicules géolocalisés sur une MkMapView.

Toutes les 4 secondes, je récupère la position de ces véhicules et anime sur une carte des annotations les représentant.

J'ai toutefois plusieurs soucis. Je ne décris dans un premier temps que le premier de ces soucis :

 

ma carte est initialement centrée sur une petite région et affiche correctement les véhicules traversant cette région. Si je fais un zoom arrière pour élargir la zone affichée, j'observe la chose suivante :

les nouvelles annotations qui s'ajoutent sur la carte ne sont visibles que lorsque je cesse l'action de zoom/dezoom (en clair, lorsque mes doigts ne sont plus en contact avec l'écran. Comme si les annotations n'étaient affichées que lorsque la méthode regionDidChangeAnimated était appelée. Je précise que je n'ai pas implémenté cette fonction). Ce sont des apparitions spontanées lorsque l'action de dezoom est terminée mais pas lorsqu'elle est en cours comme je le souhaiterais. Ce n'est pas un comportement propre à  mon code, si l'on prend n'importe quel projet manipulant des cartes et des annotations sur le site " iOS Developer Library " d'Apple, on peut reproduire ce comportement. Pour autant, j'ai trouvé des logiciels sur l'App Store (PlaneFinderHD par ex) qui affichent des milliers d'annotations sur la carte du monde entier (sans clustering) de façon fluide et immédiate lorsque l'on joue avec le niveau de zoom. Comment cela est-il réalisable ?

 

Idéalement, j'aimerai faire ce que fait PlaneFinder : afficher des centaines d'annotations animées de façon hyper fluide que l'on zoom/dezoom, scrolle sur la carte sans que les performances n'en pâtissent.

 

Par avance merci à  ceux qui pourront m'aider :)

Réponses

  • Quand les annotations views sortent de l'écran, elles sont supprimés de leur superview qui est une vue spécial qui contient toutes les annotations.


    Si tu dérives la classe MKAnnotationView et surcharge la méthode didMoveToSuperview, tu pourras le constater.


    Je ne sais pas pourquoi la classe MKMapView attends qu'un mouvement soit terminé pour remettre les annotations, mais je suppose que cela doit avoir avec le fait de garder un vue rapide pendant le zoom.


    Je ne pense pas qu'il y ait un moyen de forcer la vue à  remettre les annotations pendant les zooms.


    Cependant tu peux peut-être empêcher la vue de supprimer les annotations quand elles disparaissent de l'écran.


    Dans cette optique j'essaierai de créer des annotations views très grande pour qu'elles soient toujours visibles (quitte à  n'afficher un icône que dans leur centre). Mais dans ce cas tu risques d'avoir un problème si tu as besoin que l'utilisateur puisse sélectionner les annotations.


  • Merci FKDEV.


    Effectivement j'ai besoin que l'utilisateur puisse sélectionner les annotations.


    J'ignore comment les développeurs de l'appli que j'ai citée ont fait mais ça marche bien sur cette appli, jamais on ne voit les annotations "apparaà®tre soudainement" ou disparaà®tre et ils en gèrent beaucoup plus que moi.


    Je vois dans les informations légales de cette appli qu'ils citent la librairie "OpenGL Utility Library (GLU)" (https://code.google.com/p/iphone-glu)


    Je ne m'y connais pas du tout en OpenGL mais je me dis qu'ils ont peut-être ajouté un layer OpenGL responsable de la gestion des annotations au dessus d'une MKMapView et qu'ils ont synchronisé les deux.

Connectez-vous ou Inscrivez-vous pour répondre.