iOS 画虚线的两种方法

下面介绍两种在开发中经常使用的两种画虚线的方法.

方法一 根据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); 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值