MapView - Lassen Sie die Anmerkungen einzeln erscheinen

8

Ich füge derzeit durch eine Schleife Anmerkungen zu meiner Map hinzu ... aber die Anmerkungen erscheinen nur auf meiner Karte in Gruppen. Außerdem werden beim Laden nur ungefähr 4 Anmerkungen tatsächlich auf der Karte angezeigt ... aber wenn ich die Karte ein wenig bewege, erscheinen plötzlich alle Anmerkungen, die dort sein sollten.

Wie kann ich alle Anmerkungen einzeln nacheinander an den richtigen Ort laden?

Vielen Dank im Voraus!

Hier ist der Code, den ich verwende, um Anmerkungen hinzuzufügen:

%Vor%     
Adam Storr 06.07.2011, 02:33
quelle

2 Antworten

1

Adam,

Diese Lösung ist etwas unordentlich, da ich eines meiner aktuellen Projekte testen musste, aber hoffentlich funktioniert das für Sie.

Zuerst eine Erklärung, es ist wichtig, Daten von der UI-Präsentation zu trennen. Die [MKMapView addAnnotation (s)] sind nur ein Datenupdate zu MKMapView und haben keinen direkten Einfluss auf Animation oder Timing.

Die Delegate-Methode mapView: didAddAnnotationViews: Gibt an, wo das gesamte benutzerdefinierte Darstellungsverhalten definiert werden soll. In Ihrer Beschreibung wollten Sie nicht, dass diese auf einmal angezeigt werden, also müssen Sie Ihre Animationen sequenzieren, anstatt sie gleichzeitig auszuführen.

Eine Methode besteht darin, alle Annotationen auf einmal hinzuzufügen und sie dann mit zunehmenden Animationsverzögerungen hinzuzufügen. Neue Annotationen, die aus welchem ​​Grund auch immer hinzugefügt werden, beginnen ihre Animationen jedoch wieder bei Null.

Mit der folgenden Methode wird eine Animationswarteschlange eingerichtet, in der die Annotation-Ansichten beim Hinzufügen gespeichert werden und die Animation anschließend sequenziell gekettet wird.

Ich habe die Rahmenanimation durch Alpha ersetzt, um mich auf das Animationsproblem zu konzentrieren und es von dem Problem zu trennen, dass einige Elemente nicht angezeigt werden. Mehr dazu nach dem Code ...

%Vor%

In Bezug auf Ihr zweites Problem werden Elemente nicht immer angezeigt, bis Sie die Karte verschieben. Ich sehe keine offensichtlichen Fehler in Ihrem Code, aber hier sind einige Dinge, die ich tun würde, um das Problem zu isolieren:

  1. Entfernen Sie vorübergehend Ihre mapView: didAddAnnotationViews :, mapView: annotationForView: und alle anderen benutzerdefinierten Verhaltensweisen, um festzustellen, ob das Standardverhalten funktioniert.
  2. Stellen Sie sicher, dass Sie beim Aufruf von addAnnotation: eine gültige Annotation haben und dass die Koordinaten sichtbar sind (verwenden Sie [mapView visibleMapRect], MKMapRectContainsPoint () und MKMapPointForCoordinate ().
  3. )
  4. Wenn es immer noch nicht funktioniert, schauen Sie sich an, woher Sie den add-Annotations-Code aufrufen. Ich versuche, Annotationsaufrufe während der Kartenbewegung zu vermeiden, indem ich performSelector verwende: withObject: afterDelay. Sie können dies mit einem [NSObject cancelPreviousPerformRequestsWithTarget: selector: object:] voranstellen, um vor dem Laden von Annotationen eine leichte Verzögerung zu erzeugen, falls die Map über mehrere Wipes um eine lange Distanz verschoben wird.

Ein letzter Punkt, um den von Ihnen gewünschten Pin-Drop-Effekt zu erzielen, möchten Sie wahrscheinlich um einen festen Abstand vom ursprünglichen Objekt versetzen, anstatt von annotationVisibleRect abhängig zu sein. Ihre aktuelle Implementierung wird dazu führen, dass Stifte sich abhängig von ihrer Entfernung von der Kante mit unterschiedlichen Geschwindigkeiten bewegen. Gegenstände an der Oberseite werden langsam in Position gebracht, während Gegenstände an der Unterseite schnell an Ort und Stelle fliegen. Apples Standardanimation fällt immer von der gleichen Höhe ab. Ein Beispiel ist hier: Wie kann ich ein benutzerdefinierte "Pin-Drop" -Animation mit MKAnnotationView?

Hoffe, das hilft.

Aktualisierung: Um diesen Code in Aktion zu demonstrieren, habe ich einen Link zu einer modifizierten Version der Seismic-Demo von Apple mit den folgenden Änderungen hinzugefügt:

  1. Earthquake.h / m wurde zu einem MKAnnotation-Objekt
  2. geändert
  3. SeismicMapViewController.h / m mit dem obigen Code
  4. hinzugefügt
  5. RootViewController.h / m wurde aktualisiert, um die Kartenansicht als modale Seite zu öffnen

Siehe: Ссылка

    
Barney Mattox 13.07.2011, 02:35
quelle
0

Nach dem Hinzufügen der einzelnen Annotationen müssen Sie die Aktualisierung pausieren und der Map Zeit zum Aktualisieren lassen.

    
Phil 12.07.2011 00:31
quelle