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];
- (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!