下面介绍两种在开发中经常使用的两种画虚线的方法.
方法一 根据ImageView 原生化一个虚线的image
// 创建一个imageView 高度是你想要的虚线的高度 一般设为2
_lineImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, kScreenWidth, 2)];
// 调用方法 返回的iamge就是虚线
_lineImg.image = [self drawLineByImageView:_lineImg];
// 添加到控制器的view上
[self.view addSubview:_lineImg];
// 返回虚线image的方法
- (UIImage *)drawLineByImageView:(UIImageView *)imageView {
UIGraphicsBeginImageContext(imageView.frame.size); //开始画线 划线的frame
[imageView.image drawInRect:CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height)];
//设置线条终点形状
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
// 5是每个虚线的长度 1是高度
float lengths[] = {5,1};
CGContextRef line = UIGraphicsGetCurrentContext();
// 设置颜色
CGContextSetStrokeColorWithColor(line, [UIColor colorWithWhite:0.408 alpha:1.000].CGColor);
CGContextSetLineDash(line, 0, lengths, 2); //画虚线
CGContextMoveToPoint(line, 0.0, 2.0); //开始画线
CGContextAddLineToPoint(line, kScreenWidth - 10, 2.0);
CGContextStrokePath(line);
// UIGraphicsGetImageFromCurrentImageContext()返回的就是image
return UIGraphicsGetImageFromCurrentImageContext();
}
方法二:使用CAShapeLayer
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:3],
[NSNumber numberWithInt:1],nil]];
// Setup the path CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 89);
CGPathAddLineToPoint(path, NULL, 320,89);
// Setup the path CGMutablePathRef path = CGPathCreateMutable(); // 0,10代表初始坐标的x,y
// 320,10代表初始坐标的x,y CGPathMoveToPoint(path, NULL, 0, 10);
CGPathAddLineToPoint(path, NULL, 320,10);
[shapeLayer setPath:path];
CGPathRelease(path);