2013-12-13 18 views
11

Mogę utworzyć linię między dwoma punktami dość łatwo z poniższym kodem (część tak czy inaczej) Jak mogę zrobić linię kropkowaną zamiast bryły? Czy zmiana krycia byłaby możliwa, gdy dłuższa jest linia?Linia kropkowana na widoku mapy

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay 
{ 
    MKPolylineRenderer *renderer =[[MKPolylineRenderer alloc] initWithPolyline:overlay]; 
    renderer.strokeColor = [UIColor orangeColor]; 
    renderer.lineWidth = 3.0; 

    return renderer; 
} 

Odpowiedz

39

Możesz użyć właściwości lineDashPattern, aby utworzyć wzór dla linii.

MKPolylineRenderer to podklasa MKOverlayPathRenderer, która ma tę właściwość i kilka innych (patrz link do dokumentacji).

Na przykład ustawia wzór na linii o długości 2 punktów, a następnie o 5 punktów. Wzór jest powtarzany dla całej długości polilinii.

renderer.lineDashPattern = @[@2, @5]; 


Do krycia, można zastosować alfa do strokeColor:

renderer.strokeColor = [[UIColor orangeColor] colorWithAlphaComponent:0.5]; 

lub ustawić właściwość alpha:

renderer.alpha = 0.5; 

Nie wiem, co masz na myśli przez " im dłuższa linia jest "częścią pytania.

+0

Anna, dzięki za pomoc. To ma sens. Jeśli chodzi o "dłuższą linię", zastanawiałem się, czy można zmienić wartość alfa z 1 na .1 w samej linii. na przykład punktem początkowym byłaby wartość alfa równa 1, a punktem końcowym może być .1 – jdross

+0

Zmiana alfy wzdłuż linii byłaby gradientem i niestety ta zdolność nie jest wbudowana w standardowe renderers. Będziesz musiał utworzyć niestandardowy renderer nakładki i ręcznie wykonać rysunek. [This] (http://stackoverflow.com/a/20159374/467105) i [this] (http://stackoverflow.com/a/19377748/467105) mogą pomóc Ci zacząć, jeśli chcesz podążać tą ścieżką. – Anna

+0

Przyjemne wyjaśnienie @Anna –

Powiązane problemy