有时候需要为UIView添加虚线描边,本文记录一种实现方式,主要是通过对UIView的根layer添加CAShapeLayer来完成。效果图如下:
核心代码示例如下:
CGSize screenSize = [UIScreen mainScreen].bounds.size;CGFloat viewWidth =200;CGFloat viewHeight =200;UIView *view = [[UIView alloc] initWithFrame:CGRectMake((screenSize.width- viewWidth)/2, (screenSize.height- viewHeight) /2, viewWidth, viewHeight)];view.backgroundColor= [UIColor colorWithWhite:0.9alpha:1];view.layer.cornerRadius= CGRectGetWidth(view.bounds)/2;CAShapeLayer *borderLayer = [CAShapeLayer layer];borderLayer.bounds= CGRectMake(0,0, viewWidth, viewHeight);borderLayer.position= CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds));// borderLayer.path= [UIBezierPath bezierPathWithRect:borderLayer.bounds].CGPath;borderLayer.path= [UIBezierPath bezierPathWithRoundedRect:borderLayer.boundscornerRadius:CGRectGetWidth(borderLayer.bounds)/2].CGPath;borderLayer.lineWidth=1./ [[UIScreen mainScreen] scale];//虚线边框borderLayer.lineDashPattern= @[@8,@8];//实线边框// borderLayer.lineDashPattern= nil;borderLayer.fillColor= [UIColor clearColor].CGColor;borderLayer.strokeColor= [UIColor redColor].CGColor;[view.layeraddSublayer:borderLayer];[self.viewaddSubview:view];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
可通过修改UIBezierPath来改变虚线框的路径。如果想把边框绘制成实线,可将borderLayer.lineDashPattern置为nil即可。