我们继续上面那篇来,在实现了头部图片下拉纵向拉伸效果后,紧接着就是这个页面的核心,当前进度占总进度的比例效果显示。按照我的需求就是下面这个图的样子。
左侧进度和右侧进度说明整体被封装在一个自定义的TableViewCell里,如下图所示。
为了方便控制,我在写的时候把这个自定义cell分为了左右两部分,即左面白色背景部分和右面灰色背景部分。右面灰色背景部分就是普通的空间堆叠,这里不具体阐述,接下来我们讲一下左面进度的实现。
这里我采用的是UIView.layer addSublayer的方式。所以这里我做了两个重叠的UIView,分别用来显示灰色的总体进度以及绿色的实际进度。由于需要多次进行线段的绘制,因此在这里要封装一个绘制线段的方法,如下:
/**
* 通过 CAShapeLayer方式绘制虚线
*
* param lineView: 需要绘制成虚线的view
* param lineLength: 虚线的宽度
* param lineSpacing: 虚线的间距
* param lineColor: 虚线的颜色
**/
- (void)drawLineOfDashByCAShapeLayer:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor {
CGRect rect = CGRectMake(0, 0, 1, CGRectGetHeight(lineView.frame));
UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.strokeColor = lineColor.CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.lineWidth = CGRectGetWidth(lineView.frame);
shapeLayer.lineJoin = kCALineJoinRound;
shapeLayer.lineCap = kCALineCapRound;
shapeLayer.path = path.CGPath;
shapeLayer.lineDashPattern = @[[NSNumber numberWithInt:lineLength], [NSNumber numberWithInt:lineSpacing]];//画虚线
[lineView.layer addSublayer:shapeLayer];
}