ios-draw-gradient-colors

UIView 实现颜色的渐变的两种方式

1.inserSubLayers

CAGradientLayer *gradientLayer = [CAGradientLayer layer];  // 设置渐变效果
gradientLayer.bounds = self.bounds;
gradientLayer.borderWidth = 0;

gradientLayer.frame = self.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:
                        (id)[[UIColor redColor] CGColor],
                        (id)[UIColor blueColor].CGColor, nil];
//垂直渐变
gradientLayer.startPoint = CGPointMake(1.0, 0.5);
gradientLayer.endPoint = CGPointMake(0.5, 0.0);

//水平渐变
gradientLayer.startPoint = CGPointMake(0.0, 0.5);
gradientLayer.endPoint = CGPointMake(0.5, 1.0);

[self.layer insertSublayer:gradientLayer atIndex:0];

2.通过drawRect

- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextRestoreGState(context);
CGContextClip(context);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

int numComponents = 5;    
NSArray *gradientColors = @[[UIColor redColor],[UIColor orangeColor],[UIColor blueColor],    [UIColor greenColor],[UIColor purpleColor]];
CGFloat colors[[gradientColors count] * numComponents];
const CGFloat *components[[gradientColors count]];
for (int i = 0; i < [gradientColors count]; i++) {
    components[i] = CGColorGetComponents(((UIColor *)[gradientColors objectAtIndex:i]).CGColor);
    for (int j = 0; j < numComponents; j++) {
        colors[i * numComponents + j] = components[i][j];
    }
}
CGGradientRef gradient = CGGradientCreateWithColorComponents (colorSpace, colors, NULL, [gradientColors count]);
CGPoint startPoint;
CGPoint endPoint;
//水平渐变
startPoint = CGPointMake(rect.origin.x, 0);
endPoint = CGPointMake(rect.size.width, 0);
//垂直渐变
startPoint = CGPointMake(0.0, rect.origin.y);
endPoint = CGPointMake(0.0, rect.size.hight);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGColorSpaceRelease(colorSpace);
CGGradientRelease(gradient);
}

希望可以在你需要的时候帮到你,Best wishes!