2012-04-06 6 views
8

En un CAShapeLayer, he dibujado un UIBezierPath cerrado. Puedo llenar esta forma estableciendo el fillColor; sin embargo, deseo completar la forma con un degradado. ¿Cómo puedo configurar el CAGradientLayer para que se ajuste a la forma delineada por la ruta bezier?Rellenar un trazado con un degradado en iOS

Respuesta

5

Lo que quiere es una máscara. CAGradientlayer tiene un método -setMask que se tiene que ajustarlo a los límites de su forma, así:

[gradientLayer setMask:shapeLayer];

19

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 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); 

... 
+0

Esto es bueno, pero también debe suelta el degradado y el espacio de color. – Sulthan

+0

gracias, me olvidé de ponerlas – WhiteTiger

+0

ya que el post original contó con una máscara, que también añade la siguiente: 'CGContextAddPath (contexto, roundedRectanglePath.CGPath);' ' CGContextClip (contexto);' ' antes CGContextDrawLinearGradient' – maggix

Cuestiones relacionadas