// 初始化一个试图 (方法一)
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 200, 30)];
view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = view.bounds;
layer.colors = [NSArray arrayWithObjects:(id)[UIColor redColor].CGColor,
(id)[UIColor yellowColor].CGColor,
(id)[UIColor greenColor].CGColor,nil]; // 可以只填一中颜色
layer.startPoint = CGPointMake(0, 1);
layer.endPoint = CGPointMake(1, 1); // 这里面数字范围改动在(0-1)
[view.layer insertSublayer:layer atIndex:0]; // 添加到试图layer上
// 方法二
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = {0,1};
NSArray *colors = @[(id)[UIColor redColor].CGColor,
(id)[UIColor yellowColor].CGColor,
(id)[UIColor greenColor].CGColor];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef) colors, locations);
CGColorSpaceRelease(colorSpace);
CGPoint startPoint = (CGPoint){view.frame.size.width * 0, view.frame.size.height * 1};
CGPoint endPoint = (CGPoint){view.frame.size.width * 1, view.frame.size.height * 1};
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGGradientRelease(gradient);
UIGraphicsPopContext();
// 方法三
CIFilter *ciFilter = [CIFilter filterWithName:@"CILinearGradient"];
CIVector *vector0 = [CIVector vectorWithX:view.frame.size.width * _Point0.x Y:view.frame.size.height * (1 - _Point0.y)];
CIVector *vector1 = [CIVector vectorWithX:view.frame.size.width * Point1.x Y:view.frame.size.height * (1 - Point1.y)];
[ciFilter setValue:vector0 forKey:@"Point0"];
[ciFilter setValue:vector1 forKey:@"Point1"];
[ciFilter setValue:[CIColor colorWithCGColor:_inputColor0.CGColor] forKey:@"inputColor0"];
[ciFilter setValue:[CIColor colorWithCGColor:_inputColor1.CGColor] forKey:@"inputColor1"];
CIImage *ciImage = ciFilter.outputImage;
CIContext *con = [CIContext contextWithOptions:nil];
CGImageRef resultCGImage = [con createCGImage:ciImage
fromRect:rect];
UIImage *resultUIImage = [UIImage imageWithCGImage:resultCGImage];
CGImageRelease(resultCGImage);
[resultUIImage drawInRect:rect];