AMapPolyline.m
2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#import "AMapPolyline.h"
#import "Coordinate.h"
#pragma ide diagnostic ignored "OCUnusedMethodInspection"
@implementation AMapPolyline {
MAMultiPolyline *_polyline;
MAMultiColoredPolylineRenderer *_renderer;
CGFloat _width;
UIColor *_color;
NSArray *_colors;
BOOL _dashed;
BOOL _gradient;
}
- (instancetype)init {
if (self = [super init]) {
_polyline = [MAMultiPolyline polylineWithCoordinates:nil count:0 drawStyleIndexes:nil];
}
return self;
}
- (void)setCoordinates:(NSArray<Coordinate *> *)coordinates {
CLLocationCoordinate2D coords[coordinates.count];
for (NSUInteger i = 0; i < coordinates.count; i++) {
coords[i] = coordinates[i].coordinate;
}
[_polyline setPolylineWithCoordinates:coords count:coordinates.count];
}
- (void)setWidth:(CGFloat)width {
_width = width;
_renderer.lineWidth = width;
}
- (void)setColor:(UIColor *)color {
_color = color;
_renderer.strokeColor = color;
}
- (void)setColors:(NSArray *)colors {
// colors -> strokeColors
// egg: [black, black, black, white, white, black] => [black, white, black] + [3, 5]
NSMutableArray *strokeColors = [[NSMutableArray alloc] init];
NSMutableArray *indexs = [[NSMutableArray alloc] init];
if (colors.count > 0) {
UIColor *lastColor = [colors firstObject];
[strokeColors addObject:lastColor];
for (NSUInteger index = 1; index < colors.count; index++) {
UIColor *color = colors[index];
if (![color isEqual:lastColor]) {
[strokeColors addObject:color];
[indexs addObject:@(index)]; // index is the NEXT color
lastColor = color;
}
}
if (strokeColors.count == 1) {
[indexs addObject:@(colors.count)];
}
}
_colors = strokeColors;
_renderer.strokeColors = strokeColors;
// change polyline
[_polyline setDrawStyleIndexes:@[@(1), @(2)]];
}
- (void)setDashed:(BOOL)dashed {
_dashed = dashed;
_renderer.lineDash = dashed;
}
- (void)setGradient:(BOOL)gradient {
_gradient = gradient;
_renderer.gradient = gradient;
}
- (CLLocationCoordinate2D)coordinate {
return _polyline.coordinate;
}
- (MAMapRect)boundingMapRect {
return _polyline.boundingMapRect;
}
- (MAOverlayRenderer *)renderer {
if (_color == nil) {
_color = UIColor.blackColor;
}
if (_renderer == nil) {
_renderer = [[MAMultiColoredPolylineRenderer alloc] initWithMultiPolyline:_polyline];
_renderer.lineWidth = _width;
_renderer.strokeColor = _color;
_renderer.strokeColors = _colors;
_renderer.lineDash = _dashed;
_renderer.gradient = _gradient;
}
return _renderer;
}
@end