ändert dynamisch die Zeilenbreite von mkpolyline

8

Ich habe Karte in meiner App, in der sich bewegt, wie pro Benutzerstandort. Ich habe erfolgreich eine Polylinie für Quelle und Ziel gezeichnet. Mit folgendem Code

%Vor%

Aber mein Problem ist, wenn sich die Karte bewegt, ich ändere den Bereich der Karte, wenn sich der Benutzer bewegt, dann wird die Polylinie manchmal nicht gut angezeigt, wenn sie dicker ist als die tatsächliche Größe, wie Sie im unteren Bild sehen können.

>

Ich befestige das Bild unten, bitte lassen Sie mich wissen, was ich für glatte Polylinie tun kann, wenn sich die Karte bewegt.

BEARBEITEN

Wie Matt vorgeschlagen hat, erstelle ich eine Unterklasse von MKPolylineRenderer und implementiere die Methode drawMapRect wie folgt:

%Vor%

Aber das gleiche Problem Siehe Bild unten:

ok, ich glaube, ich habe ein Problem, meine Polylinie wird einmal hinzugefügt, aber als Benutzergeschwindigkeit ändert sich die Zoomstufe von MKMapView, die Zoomstufe wird geändert, aber die Polylinienbreite wird nicht aktualisiert,

SO wie kann ich lineWidth von mkpolyline ändern?

    
NetDemo 10.11.2014, 14:19
quelle

3 Antworten

2

Das Problem ist, dass Sie lineWidth auf eine feste Breite setzen (eine wirklich große feste Breite). Dies wird größer oder kleiner, wenn die Karte größer oder kleiner gezoomt wird.

Implementieren Sie stattdessen Ihre eigene MKOverlayRenderer-Unterklasse, und überschreiben Sie drawMapRect:zoomScale:inContext: . Es erhält einen zoomScale -Parameter, und Sie können die Breite Ihrer Linie so anpassen, dass sie der aktuellen Skala entspricht.

    
matt 10.11.2014 14:37
quelle
2

Unterklasse MKPolylineRenderer und override applyStrokePropertiesToContext:atZoomScale: , so dass es die Skalierung ignoriert und Linien mit konstanter Breite zeichnet:

%Vor%

Benutze es jetzt und bewundere sein weiches Rendering:

%Vor%     
Gwendal Roué 24.08.2015 13:42
quelle
1

Sie müssen MKPolylineRenderer anstelle von MKPolylineView

verwenden %Vor%

Lesen Sie diese:

  

Die MKPolylineRenderer-Klasse stellt die visuelle Darstellung für ein MKPolyline-Overlay-Objekt bereit. Dieser Renderer streicht nur über die Linie. es füllt es nicht aus. Sie können die Farbe und andere Zeichenattribute des Polygons ändern, indem Sie die von der übergeordneten Klasse geerbten Eigenschaften ändern. Normalerweise verwenden Sie diese Klasse wie sie ist und unterteilen sie nicht.

Aus der Apple-Bibliothek

  

Die MKPolylineView-Klasse bietet die visuelle Darstellung eines MKPolyline-Annotationsobjekts. Diese Ansicht streicht den durch die Anmerkung dargestellten Pfad. (Diese Klasse füllt nicht den durch den Pfad eingeschlossenen Bereich.) Sie können die Farbe und andere Zeichenattribute des Pfads ändern, indem Sie die von der MKOverlayPathView-Klasse geerbten Eigenschaften ändern. Diese Klasse wird normalerweise unverändert und nicht unterklassiert verwendet.

Aus der Apple-Bibliothek

    
Kampai 10.11.2014 14:27
quelle

Tags und Links