Ich möchte meine Benutzeroberfläche gemäß einer MKMapView kontinuierlich aktualisieren, wenn der Benutzer die Karte zoomt oder scrollt. (Nicht nur, nachdem das Scrollen beendet wurde, das funktioniert gut.)
Ich habe versucht, die Delegate-Methode mapView: regionWillChangeAnimated: die laut der Dokumentation "aufgerufen wird, wenn die aktuell angezeigte Kartenregion ändert. Während des Scrollens kann diese Methode viele Male aufgerufen werden, um Aktualisierungen der Kartenposition zu melden." Ссылка
%Vor%Aber leider funktioniert das nicht, weil die Dokumentation nicht die Wahrheit zu sagen scheint. Die Methode wird nur einmal zu Beginn des Regionswechsels aufgerufen. Während des Scrollens, während der Finger unten ist und sich bewegt, wird die Methode nie wieder aufgerufen.
Der einzige Beitrag zu diesem Problem, den ich finden konnte, war von macroumors member namanhams: Ссылка Aber niemand hat Ideen gefunden ...
Als Workaround habe ich versucht, einen Timer in regionWillChange einzurichten (und in regionDidChange ungültig zu machen):
%Vor%Aber das geht auch nicht. Alle Methodenaufrufe vom Timer werden alle gleichzeitig ausgeführt, nachdem das Scrollen beendet wurde. Scheint wie das Scrollen der MapView blockiert den Haupt-Thread oder etwas ...
Ich habe diesen Beitrag auch auf stackoverflow gelesen, habe ihn aber leider nicht vollständig verstanden: MKMapView-Redraw-Ereignisse überwachen Wenn also die Lösung für mein Problem tatsächlich in diesem SO-Thread liegt, sag es mir bitte, und ich versuche, mich in die Details zu vertiefen.
Ich hoffe immer noch, dass ich einfach zu blöd oder zu blind bin, um die richtige Delegiertenmethode zu finden, und schätze alle Hinweise, Problemumgehungen und Best Practices für den Umgang mit MKMapView-Regionentracking.
Danke!
Das wird funktionieren:
%Vor%Eine andere Methode ist das Erstellen eines Timers in mapView: regionWillChangeAnimated und das Ungültigmachen in mapView: regionDidChangeAnimated.