Dieser Code legt eine Standardzoomstufe um eine angegebene Position in viewDidLoad
fest. Der Code funktioniert in früheren Versionen von iOS fein:MapView in iOS6 zeigt bestimmte Zoomstufen bei Breiten> 75 Nord nicht an
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
jedoch in iOS6 für Standorte mit Breite über ~ 75 (> 75,1) die App stürzt ab mit der folgenden Meldung:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
gefunden dass für die angegebene Zoomstufe mapView
intern kein richtiges MKCoordinateRegion
gesetzt werden kann. [mapView regionThatFits:region]
gibt alle Werte als nan
zurück. Wenn ich die Variable region
direkt verwende, wird nur die Standardkarte (die ganze Welt) angezeigt.
Nach ein paar Tests habe ich festgestellt, dass durch die Anpassung der visibleDistance
kann ich den Code richtig funktionieren. Die magische Distanz scheint etwas über 20 Kilometer zu liegen (irgendwo zwischen 22 und 23 km für eine Reihe von Breiten- und BreitengradenDelta-Werten). Dies geschieht nur in nördlichen Breiten (-80 funktioniert gut).
Die Karten funktionieren an jedem Ort nach der anfänglichen Positionierung. Es sieht so aus, als ob Apple die Art der Initialisierung von Kartenregionen geändert hat. Ich verwende eine höhere Zoomstufe für die betroffene Region als Workaround. Gibt es einen anderen Weg, um es richtig funktionieren zu lassen?
Versuchen Sie nicht, regionThatFits zu verwenden, um eine MKCoordinateRegion zu generieren. In iOS 6 stelle ich fest, dass es nicht wie erwartet funktioniert (ich denke, das ist ein Fehler). Erstellen Sie stattdessen MKCoordinateSpan, um eine MKCoordinateRegion zu erstellen. Richten Sie dann die Region der Kartenansicht darauf ein. Verwenden Sie abschließend setCenterCoordinate, um die Mittelposition der Kartenansicht einzurichten. –
Aber ich muss die "MKCoordinateRegion" kennen, die auf dem Bildschirm angezeigt wird, um zusätzliche Parameter einzurichten, die das partielle Laden von Orten steuern. Wenn ich einen 'MKCoordinateSpan' benutze, würde ich variable Standardniveaus des Zooms zeigen, abhängig von der Breite (es sei denn, ich kompensiere manuell). 'MKCoordinateRegionMakeWithDistance()' funktioniert wie es sollte, aber das Problem liegt in der Methode, die 'mapView' mit der Region initialisiert, weil das Problem offensichtlich ist, wenn ich' setRegion: 'direkt benutze (ohne' regionThatFits: ') (die Map zeigt die ganze Welt). – Neur0mans3r
Ich hatte dieses Problem. Als ich meine mapView postete, war der Frame 0,0,0,0. Nicht sicher, ob das das Problem war. Ich habe den 'regionThatFits'-Aufruf in meinem Code entfernt und stattdessen eine Region gesendet, die mit 'MKCoordinateRegionMake (location, span)' erstellt wurde, und es scheint jetzt für mich zu funktionieren. –