2017-01-18 9 views
0

Wie zeichne mehrere MKPolyline mit verschiedenen Farben und Mustern.MKPolyline mit verschiedenen Farben in Objective c

  • Ich wollte mit rot gestrichelte Mustern zwei MKPolylines
  • eine mit blauer Farbe durchgezogene Linie
  • Sekunden ziehen

ich in der Lage bin Muster zu unterscheiden, aber es ist nicht differenzierenden Farben hier Mein Code

-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
{ 
    if ([overlay isKindOfClass:[self.myPolyline class]]) 
    { 

     MKPolylineRenderer *renderer1 = [[MKPolylineRenderer alloc]initWithPolyline:overlay]; 
     UIColor *routeColor = [UIColor blueColor]; 
     renderer1.strokeColor = routeColor; 
     renderer1.lineWidth = 5; 

     return renderer1; 
    } 
    if ([overlay isKindOfClass:[self.myDottedPolyline class]]) 
    { 
     //sets the pattern to a line 2 points long followed by a 1 point gap. 
     //renderer.lineDashPattern = @[@2, @1]; 

     MKPolylineRenderer *renderer2 = [[MKPolylineRenderer alloc]initWithPolyline:overlay]; 
     UIColor *liveRouteColor = [UIColor redColor]; 
     renderer2.lineWidth = 7; 
     renderer2.lineDashPattern = @[@20,@3]; 
     renderer2.strokeColor = liveRouteColor; 

     return renderer2; 
    } 

    return nil; 
} 
+0

Wie Sie MKPolyline in Ihrer Karte hinzufügen, können Sie diesen Code hinzufügen? – CodeChanger

+0

[self.sampleMap addOverlay: self.mypolyline]; [self.sampleMap addOverlay: self. myDottedPolyline] –

+0

Ok, kannst du jetzt Screenshots hinzufügen, die du auf deiner Karte bekommst? – CodeChanger

Antwort

0

Ich benutze unten Code t o differenzieren Polylinie Farben und Muster, aber es druckt // Renderer 2 Drucken Renderer 2 nur einmal ausgeführt. Danach springt es erneut auf Renderer 1.

-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
    { 
     UIColor *BlueRoute = [UIColor colorWithRed:0/255.0f green:104/255.0f blue:163/255.0f alpha:1.0f]; 
     UIColor *redRoute = [UIColor colorWithRed:241/255.0f green:122/255.0f blue:6/255.0f alpha:1.0f]; 


     if ([overlay isMemberOfClass:[_myPolyline class]]) 
     { 
      MKPolylineRenderer *renderer1 = [[MKPolylineRenderer alloc]initWithPolyline:overlay]; 

       NSLog(@"Renderer : %@",renderer1); 
       renderer1.lineWidth = 5; 
       renderer1.path = (__bridge CGPathRef _Nullable)(self.myPolyline); 
       [renderer1 createPath]; 
       [renderer1 invalidatePath]; 
       [renderer1 setNeedsDisplay]; 
       renderer1.strokeColor = BlueRoute; 

       if (_myPolyline.isAccessibilityElement == TRUE) 
       { 
        NSLog(@"Renderer Color : %@",renderer1); 
        renderer1.fillColor = BlueRoute; 
       } 

       return renderer1; 


     } 



     if ([overlay isMemberOfClass:[_myDottedPolyline class]]) 
     { 
      MKPolylineRenderer *renderer2 = [[MKPolylineRenderer alloc]initWithPolyline:overlay]; 
//Renderer 2 print 
      NSLog(@"Renderer 2 : %@",renderer2); 

       renderer2.lineWidth = 7; 
       renderer2.lineDashPattern = @[@20,@3]; 
       [renderer2 setNeedsDisplay]; 
       renderer2.path = (__bridge CGPathRef _Nullable)(self.myDottedPolyline); 
       [renderer2 createPath]; 
       [renderer2 invalidatePath]; 
       renderer2.strokeColor = redRoute; 


       if (_myDottedPolyline.isAccessibilityElement == FALSE) 
       { 
        //Renderer 2 print 
        NSLog(@"Renderer 2 Color: %@",renderer2); 

        renderer2.fillColor = redRoute; 

       } 

       return renderer2; 

       //sets the pattern to a line 2 points long followed by a 1 point gap. 
       //renderer.lineDashPattern = @[@2, @1]; 

     } 
      return nil; 
    } 
0

Angenommen, Sie Overlays für zwei König von Typen wollen, hätte ich das Overlay-Typ mit einer BOOL-Eigenschaft gesteuert, wenn nur sagen lässt, einfache Route dieses Overlay hinzufügen, wenn es die erweiterte Route fügen Sie das andere Overlay hinzu. [self.myPolyline-Klasse] und [self.myDottedPolyline Klasse] können gleiche Klasse sein >> id.

@property(nonatomic,assign) BOOL isDottedPolyline; 


    -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
    { 
     UIColor *BlueRoute = [UIColor colorWithRed:0/255.0f green:104/255.0f blue:163/255.0f alpha:1.0f]; 
     UIColor *redRoute = [UIColor colorWithRed:241/255.0f green:122/255.0f blue:6/255.0f alpha:1.0f]; 


     if (!self.isDottedPolyline) 
     { 
      MKPolylineRenderer *renderer1 = [[MKPolylineRenderer alloc]initWithPolyline:overlay]; 

       NSLog(@"Renderer : %@",renderer1); 
       renderer1.lineWidth = 5; 
       renderer1.path = (__bridge CGPathRef _Nullable)(self.myPolyline); 
       [renderer1 createPath]; 
       [renderer1 invalidatePath]; 
       [renderer1 setNeedsDisplay]; 
       renderer1.strokeColor = BlueRoute; 

       if (_myPolyline.isAccessibilityElement == TRUE) 
       { 
        NSLog(@"Renderer Color : %@",renderer1); 
        renderer1.fillColor = BlueRoute; 
       } 

       return renderer1; 


     } 
    else if(self.isDottedPolyline){ 

      MKPolylineRenderer *renderer2 = [[MKPolylineRenderer alloc]initWithPolyline:overlay]; 
//Renderer 2 print 
      NSLog(@"Renderer 2 : %@",renderer2); 

       renderer2.lineWidth = 7; 
       renderer2.lineDashPattern = @[@20,@3]; 
       [renderer2 setNeedsDisplay]; 
       renderer2.path = (__bridge CGPathRef _Nullable)(self.myDottedPolyline); 
       [renderer2 createPath]; 
       [renderer2 invalidatePath]; 
       renderer2.strokeColor = redRoute; 


       if (_myDottedPolyline.isAccessibilityElement == FALSE) 
       { 
        //Renderer 2 print 
        NSLog(@"Renderer 2 Color: %@",renderer2); 

        renderer2.fillColor = redRoute; 

       } 

       return renderer2; 

       //sets the pattern to a line 2 points long followed by a 1 point gap. 
       //renderer.lineDashPattern = @[@2, @1]; 

     } else{ 
      return nil; } 
    } 

Ich nehme an, Sie zwei MKPolylineRenderer für 2 verschiedene Zwecke verwenden self.isDottedPolyline auf true zu verwenden, wenn u ein vernarrt erstellen möchten und es auf false gesetzt, wenn Sie die andere, zwischen zwei den Vermerk schreiben wollen und wenn u

[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 
     // //NSLog(@"Found placemarks: %@, error: %@", placemarks, error); 
     if (error == nil && [placemarks count] > 0) { 
    if (I WANT DOTED POLYLINE) 
     self. isDottedPolyline = YES; 
    else 
     self. isDottedPolyline = NO; 

} 
}]; 

verwenden u gesetzt self.isDottedPolyline es wahr oder falsch ist, dann wird poliline auf gemacht werden, was Sie brauchen, und wie es zu -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay geht, wird es sehen, die man wahr, vernarrt oder nicht.

+0

könnten Sie es mit Code –

+0

plz aufweichen können Sie plz oben verweisen redigieren und einige Änderung vorschlagen –

Verwandte Themen