美文网首页MKMapKit
百度地图多显色线段绘制

百度地图多显色线段绘制

作者: zxh123456 | 来源:发表于2020-01-09 17:29 被阅读0次

    百度添加折线绘制

    // 添加折线覆盖物
        CLLocationCoordinate2D coords[5] = {0};
        coords[0] = CLLocationCoordinate2DMake(39.968, 116.260);
        coords[1] = CLLocationCoordinate2DMake(39.912, 116.324);
        coords[2] = CLLocationCoordinate2DMake(39.968, 116.373);
        coords[3] = CLLocationCoordinate2DMake(39.912, 116.439);
        coords[4] = CLLocationCoordinate2DMake(39.968, 116.490);
        BMKPolyline *polyline = [BMKPolyline polylineWithCoordinates:coords count:5];
        [_mapView addOverlay:polyline];
    

    然后代理中设置线段颜色、宽度等属性

    - (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay{
        if ([overlay isKindOfClass:[BMKPolygon class]]){
            BMKPolygonView* polygonView = [[BMKPolygonView alloc] initWithOverlay:overlay];
            polygonView.strokeColor = [[UIColor alloc] initWithRed:0.0 green:0 blue:0.5 alpha:1];
            polygonView.fillColor = [[UIColor alloc] initWithRed:0 green:1 blue:1 alpha:0.2];
            polygonView.lineWidth = 2.0;
            polygonView.lineDashType = kBMKLineDashTypeDot;
            return polygonView;
        }
         if ([overlay isKindOfClass:[BMKPolyline class]]){
                 BMKPolylineView *polylineView = [[BMKPolylineView alloc] initWithPolyline:overlay];
                 //设置polylineView的画笔颜色为蓝色
                 polylineView.strokeColor = [[UIColor alloc] initWithRed:19/255.0 green:107/255.0 blue:251/255.0 alpha:1.0];
                 polylineView.lineWidth = 1;
                 return polylineView;
            }
        return nil;
    }
    

    实际开发中需要同时绘制多个颜色线段,BMKPolylineView没有颜色属性

    方法一:自定义继承的子类无法实现,因为BMKPolyline *polyline = [BMKPolyline polylineWithCoordinates:coords count:5];
    方法返回就是BMKPolyline类,而不是子类。

    方法二:runtime
    创建一个BMKPolyline的Color分类,添加属性lineColor

    //.h
    @interface BMKPolyline (Color)
    @property (nonatomic , copy)  NSString *lineColor;
    @end
    //.m
    #import "BMKPolyline+Color.h"
    #import <objc/runtime.h>
    
    static void *strKey = &strKey;
    
    @implementation BMKPolyline (Color)
    
    -(NSString *)lineColor{
        return objc_getAssociatedObject(self, &strKey);
    }
    
    -(void)setLineColor:(NSString *)lineColor{
        objc_setAssociatedObject(self, &strKey, lineColor, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    @end
    

    使用的关键代码如下

    //绘制线
     BMKPolyline *polyLine = [BMKPolyline polylineWithCoordinates:coors count:2];
     [polyLine setLineColor: model.lineColor];
    [_mapView addOverlay:polyLine];
    
    - (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay{
    
         if ([overlay isKindOfClass:[BMKPolyline class]]){
             BMKPolylineView *polylineView = [[BMKPolylineView alloc] initWithPolyline:(BMKPolyline *)overlay];
             //设置polylineView的画笔颜色
             NSString *lineColor = [((BMKPolyline *)overlay) lineColor];
             if (lineColor.length<1) {
                 lineColor = @"#4169E1";
             }
             polylineView.strokeColor = [ZXHTool colorFromHexRGB:lineColor alpha:1];
            //设置polylineView的画笔宽度
             polylineView.lineWidth = 3;
             return polylineView;
            }
        return nil;
    }
    
    
    IMG_1986.PNG

    搞定~

    相关文章

      网友评论

        本文标题:百度地图多显色线段绘制

        本文链接:https://www.haomeiwen.com/subject/hoayactx.html