Erstelle ein UIImage aus einer MKMapView

8

Ich möchte ein UIImage von einem MKMapView erstellen. Meine Karte wird in der Ansicht korrekt angezeigt, jedoch ist die UIImage nur ein graues Bild. Hier ist das relevante Snippet.

%Vor%

Weiß jemand, wie man eine UIImage mit MapKit erstellt?

    
Loren Olson 11.11.2010, 21:45
quelle

6 Antworten

8

Ich verwende den gleichen Code, der mit ios sdk 4.1 getestet wurde und funktioniert einwandfrei. Wenn also die Karte dem Benutzer und dem Benutzer bereits angezeigt wird, drücken Sie die Taste. Diese Aktion wird aufgerufen:

%Vor%

und hier ist die Wrapper-Funktion als UIView-Erweiterung realisiert:

%Vor%

Das Problem liegt also nicht in diesem Code-Teil.

    
Prcela 18.11.2010, 16:03
quelle
4

Auf iOS7 gibt es dafür eine neue API auf MapKit namens MKMapSnapshotter. Sie müssen also keine Kartenansicht erstellen, die Kacheln laden und einen Grafikkontext erstellen, der sich selbst erfasst.

Werfen Sie einen Blick darauf Ссылка

    
DZenBot 07.10.2013 20:06
quelle
3

Hier ist die verbesserte Funktion für die Retina-Anzeige:

%Vor%     
Prcela 24.11.2010 18:21
quelle
1

Hey Loren. In der mapView gibt es mehrere Ebenen. Ich denke, die erste ist die Karte und die zweite ist die Google-Ebene. Möglicherweise haben sie nach 3.1 im Mapkit etwas geändert. Sie können versuchen

%Vor%

Sie können auch versuchen

%Vor%

Hoffe, das hilft.

    
saurb 12.11.2010 04:26
quelle
1

Beachten Sie, dass mapView die Ladeoperation möglicherweise nicht beendet, sodass das Bild grau sein kann. als

%Vor%

wird nicht immer aufgerufen, Sie sollten UIImage in

erhalten %Vor%

so, der Code einfach so

%Vor%     
Bigyelow 24.12.2013 15:00
quelle
0

Wenn Sie dies sofort nach dem Initialisieren der Karte aufrufen (vielleicht in viewDidLoad?), könnten Sie ein graues Bild erhalten, da die Karte noch nicht fertig gezeichnet ist.

Versuchen:

  • Aufrufen des Capture-Codes mit performSelector: withObject: afterDelay: Verwenden einer kurzen Verzögerung (sogar 0 Sekunden können funktionieren, so dass sie direkt nach dem Beenden der aktuellen Methode ausgelöst wird)
  • Wenn Sie Anmerkungen hinzufügen, rufen Sie den Erfassungscode in der Delegatmethode didAddAnnotationViews
  • auf

Bearbeiten:
Auf dem Simulator funktioniert mit performSelector eine Verzögerung von null. Auf dem Gerät ist eine längere Verzögerung erforderlich (ca. 5 Sekunden).

Wenn Sie jedoch Annotationen hinzufügen (und in der Methode didAddAnnotationViews erfassen), funktioniert dies sofort auf dem Simulator und dem Gerät.

    
Anna 11.11.2010 22:18
quelle

Tags und Links