Rellenar una ruta con gradiente en iOS

En un CAShapeLayer , CAShapeLayer un CAShapeLayer cerrado. Puedo completar esta forma estableciendo fillColor , pero quiero completar la forma con un degradado. ¿Cómo puedo configurar CAGradientLayer para que se CAGradientLayer a la forma delineada por la ruta bezier?

Lo que quieres es una máscara. CAGradientlayer tiene un método -setMask que puede recortarlo a los límites de su forma de la siguiente manera:

[gradientLayer setMask:shapeLayer];

Un proyecto de ejemplo sería el siguiente:

 ... 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 networkingColor].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); ...