有时候需要为UIView添加虚线描边,本文记录一种实现方式,主要是通过对UIView的根layer添加CAShapeLayer来完成。效果图如下:
核心代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 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.9 alpha: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.bounds cornerRadius: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.layer addSublayer:borderLayer];
[self.view addSubview:view];
|
可通过修改UIBezierPath来改变虚线框的路径。如果想把边框绘制成实线,可将borderLayer.lineDashPattern
置为nil
即可。
目前已转行教育行业,欢迎加微信交流:CaryaLiu