最近在一个项目中需求是在一个地图的View上画一个导航的路径,经过尝试,我的方法是:
#import <UIKit/UIKit.h>
@interface MapPathView : UIView
@property(nonatomic,strong)NSMutableArray *pathPoints;
-(void)drawPaths;
@end
#import "MapPathView.h"
@implementation MapPathView
+(Class)layerClass{
return [CAShapeLayer class];
}
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
_pathPoints = [[NSMutableArray alloc] init];
self.backgroundColor = [UIColor clearColor];
((CAShapeLayer *)self.layer).fillColor = nil;
((CAShapeLayer *)self.layer).strokeColor = [UIColor colorWithRed:68/255.0 green:52/255.0 blue:24/255.0 alpha:1.0].CGColor;
((CAShapeLayer *)self.layer).lineWidth=1.5;
((CAShapeLayer *)self.layer).lineCap=@"round";
((CAShapeLayer *)self.layer).lineJoin=@"round";
}
return self;
}
-(void)drawPaths{
if ([_pathPoints count] >= 2){
//设置属性
UIBezierPath *path = [UIBezierPath bezierPath];
//UIBezierPath *path = [[UIBezierPath alloc] init];
//path.lineWidth=2.0;
//path.lineCapStyle=kCGLineCapRound;
//path.lineJoinStyle=kCGLineCapRound;
[path moveToPoint:[[_pathPoints firstObject] CGPointValue]];
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [_pathPoints count] - 1)];
[_pathPoints enumerateObjectsAtIndexes:indexSet
options:0
usingBlock:^(NSValue *pointValue, NSUInteger idx, BOOL *stop) {
[path addLineToPoint:[pointValue CGPointValue]];
}];
((CAShapeLayer *)self.layer).path = path.CGPath;
}else{
((CAShapeLayer *)self.layer).path = nil;
}
}
@end
注意:
+(Class)layerClass{
return [CAShapeLayer class];
}
很重要