在iOS上使用渐变填充路径

CAShapeLayer ,我绘制了一个封闭的UIBezierPath 。 我可以通过设置fillColor来填充这个形状,但是我想用渐变填充形状。 如何设置CAGradientLayer ,使其CAGradientLayer为bezier路径所概述的形状?

你想要的是一个面具。 CAGradientlayer有一个-setMask方法,可以将它剪切到你的形状边界,如下所示:

[gradientLayer setMask:shapeLayer];

草案示例如下:

 ... CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = UIGraphicsGetCurrentContext(); UIColor *gradientColor = [UIColor colorWithRed:0.51 green:0.0 blue:0.49 alpha:1.0]; NSArray *gradientColors = [NSArray arrayWithObjects: (id)[UIColor blueColor].CGColor, (id)gradientColor.CGColor, (id)[UIColor redColor].CGColor, nil]; CGFloat gradientLocations[] = {0, 0.5, 1}; CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)gradientColors, gradientLocations); UIBezierPath *roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 200, 200) cornerRadius:6]; CGContextSaveGState(context); [roundedRectanglePath fill]; [roundedRectanglePath addClip]; CGContextDrawLinearGradient(context, gradient, CGPointMake(10, 10), CGPointMake(210, 10), 0); CGColorSpaceRelease(colorSpace); CGGradientRelease(gradient); ...