标签:
- (void)drawLine{ CAShapeLayer *shapeLayer = [CAShapeLayer layer]; [shapeLayer setBounds:self.bounds]; [shapeLayer setPosition:self.center]; [shapeLayer setFillColor:[[UIColor clearColor] CGColor]]; // 设置虚线颜色为blackColor [shapeLayer setStrokeColor:[[UIColor blackColor] CGColor]]; [shapeLayer setStrokeColor:[[UIColor colorWithRed:223/255.0 green:223/255.0 blue:223/255.0 alpha:1.0f] CGColor]]; // 3.0f设置虚线的宽度 [shapeLayer setLineWidth:1.0f]; [shapeLayer setLineJoin:kCALineJoinRound]; // 3=线的宽度 1=每条线的间距 [shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:1],nil]]; // Setup the path CGMutablePathRef path = CGPathCreateMutable(); // 0,10代表初始坐标的x,y // 320,10代表初始坐标的x,y CGPathMoveToPoint(path, NULL, 0, 0); CGPathAddLineToPoint(path, NULL, 0,63); [shapeLayer setPath:path]; CGPathRelease(path); [_verticalLine.layer addSublayer:shapeLayer]; }
或
#import <UIKit/UIKit.h> @interface LineDashView : UIView @property (nonatomic, strong) NSArray *lineDashPattern; // 线段分割模式 @property (nonatomic, assign) CGFloat endOffset; // 取值在 0.001 --> 0.499 之间 - (instancetype)initWithFrame:(CGRect)frame lineDashPattern:(NSArray *)lineDashPattern endOffset:(CGFloat)endOffset; @end
#import "LineDashView.h" @interface LineDashView () { CAShapeLayer *_shapeLayer; } @end @implementation LineDashView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds]; _shapeLayer = (CAShapeLayer *)self.layer; _shapeLayer.fillColor = [UIColor clearColor].CGColor; _shapeLayer.strokeStart = 0.001; _shapeLayer.strokeEnd = 0.499; _shapeLayer.lineWidth = frame.size.width; _shapeLayer.path = path.CGPath; } return self; } - (instancetype)initWithFrame:(CGRect)frame lineDashPattern:(NSArray *)lineDashPattern endOffset:(CGFloat)endOffset { LineDashView *lineDashView = [[LineDashView alloc] initWithFrame:frame]; lineDashView.lineDashPattern = lineDashPattern; lineDashView.endOffset = endOffset; return lineDashView; } #pragma mark - 修改view的backedLayer为CAShapeLayer + (Class)layerClass { return [CAShapeLayer class]; } #pragma mark - 改写属性的getter,setter方法 @synthesize lineDashPattern = _lineDashPattern; - (void)setLineDashPattern:(NSArray *)lineDashPattern { _lineDashPattern = lineDashPattern; _shapeLayer.lineDashPattern = lineDashPattern; } - (NSArray *)lineDashPattern { return _lineDashPattern; } @synthesize endOffset = _endOffset; - (void)setEndOffset:(CGFloat)endOffset { _endOffset = endOffset; if (endOffset < 0.499 && endOffset > 0.001) { _shapeLayer.strokeEnd = _endOffset; } } - (CGFloat)endOffset { return _endOffset; } #pragma mark - 重写了系统的backgroundColor属性 - (void)setBackgroundColor:(UIColor *)backgroundColor { _shapeLayer.strokeColor = backgroundColor.CGColor; } - (UIColor *)backgroundColor { return [UIColor colorWithCGColor:_shapeLayer.strokeColor]; } @end
LineDashView *line1 = [[LineDashView alloc] initWithFrame:CGRectMake(verticalLineX, verticalLineY, 1, 63) lineDashPattern:@[@1, @1] endOffset:0.495]; line1.backgroundColor = [UIColor redColor]; [self.contentView addSubview:line1];
标签:
原文地址:http://www.cnblogs.com/ZhangYuGe/p/4727699.html