iOS – 基于百分比填充多种颜色的bezierPath

我在Objective-C中绘制了一个UIBezierPath,并用红色填充。 现在,我想根据百分比用多种颜色填充path。 例如:我想用20%的绿色填充path,剩下的80%用红色填充,而不是渐变。 我也希望在填充和笔画之间有几个像素的间距。

我不知道我怎样才能完成这些事情。 有谁知道我可以做到这一点或指出我在正确的方向吗?

提前谢谢了!

UIBezierPath* bezierPath = UIBezierPath.bezierPath; [bezierPath moveToPoint: CGPointMake(50, 50)]; [bezierPath addLineToPoint: CGPointMake(60, 90)]; [bezierPath addLineToPoint: CGPointMake(80, 90)]; [bezierPath addLineToPoint: CGPointMake(90, 50)]; bezierPath.lineCapStyle = kCGLineCapRound; bezierPath.lineJoinStyle = kCGLineJoinBevel; [UIColor.redColor setFill]; [bezierPath fill]; [UIColor.blackColor setStroke]; bezierPath.lineWidth = 4; [bezierPath stroke]; 

这里是你如何做到这一点,我已经把path分成了20%的5个部分。

在这里输入图像说明

  UIBezierPath* bezierPath = UIBezierPath.bezierPath; [bezierPath moveToPoint: CGPointMake(50, 50)]; [bezierPath addLineToPoint: CGPointMake(60, 90)]; [bezierPath addLineToPoint: CGPointMake(80, 90)]; [bezierPath addLineToPoint: CGPointMake(90, 50)]; bezierPath.lineCapStyle = kCGLineCapRound; bezierPath.lineJoinStyle = kCGLineJoinBevel; [UIColor.redColor setFill]; bezierPath.lineWidth = 4; [bezierPath stroke]; [bezierPath addClip]; CGRect boundingBox = CGPathGetBoundingBox(bezierPath.CGPath); CGRect firstTwentyPercent = CGRectMake(boundingBox.origin.x, boundingBox.origin.y + boundingBox.size.height - 0.2 * boundingBox.size.height, boundingBox.size.width, 0.2 * boundingBox.size.height); [[UIColor greenColor] setFill]; UIRectFill(firstTwentyPercent); CGRect secondTwentyPercent = CGRectMake(boundingBox.origin.x, boundingBox.origin.y + boundingBox.size.height - 0.4 * boundingBox.size.height, boundingBox.size.width, 0.2 * boundingBox.size.height); [[UIColor blueColor] setFill]; UIRectFill(secondTwentyPercent); CGRect thirdTwentyPercent = CGRectMake(boundingBox.origin.x, boundingBox.origin.y + boundingBox.size.height - 0.6 * boundingBox.size.height, boundingBox.size.width, 0.2 * boundingBox.size.height); [[UIColor redColor] setFill]; UIRectFill(thirdTwentyPercent); CGRect fourthTwentyPercent = CGRectMake(boundingBox.origin.x, boundingBox.origin.y + boundingBox.size.height - 0.8 * boundingBox.size.height, boundingBox.size.width, 0.2 * boundingBox.size.height); [[UIColor cyanColor] setFill]; UIRectFill(fourthTwentyPercent); CGRect fifthTwentyPercent = CGRectMake(boundingBox.origin.x, boundingBox.origin.y, boundingBox.size.width, 0.2 * boundingBox.size.height); [[UIColor orangeColor] setFill]; UIRectFill(fifthTwentyPercent);